当前位置: 首页 > wzjs >正文

游戏网站开发试验报告免费企业网站建设

游戏网站开发试验报告,免费企业网站建设,今天宁波最新消息,响应式网站教程1 什么是线程 线程是cpu调度的最小单位&#xff0c;在Linux 下 实现线程的方式为轻量级进程&#xff0c;复用进程的结构体&#xff0c;使用clone函数创建 2 线程安全 所谓线程安全&#xff0c;更确切的应该描述为内存安全 #include <stdio.h> #include <pthread.h…

1 什么是线程

线程是cpu调度的最小单位,在Linux 下 实现线程的方式为轻量级进程,复用进程的结构体,使用clone函数创建

2 线程安全

所谓线程安全,更确切的应该描述为内存安全

#include <stdio.h>
#include <pthread.h>
int a=1;
void* myfun(){for(int i=0;i<10000;i++){a++;}
}int main(){pthread_t t1, t2;
pthread_create(&t1, NULL,myfun, (void*)1);
pthread_create(&t2, NULL, myfun, (void*)2);
pthread_join(t1, NULL);
pthread_join(t2, NULL);}

上述代码 按照预期应该是 a++20000次,而执行结果却与预期不符,这就是典型的线程不安全

产生原因也很简单,在现代操作系统下 cpu并不是直接访问内存,每个cpu核心都有一个 独立的L0 L1 缓存,以及共享的L2 缓存,在线程1 将 a 从主存写入缓存时,进行++操作,此时a +1 并未回写至主存, 此时线程2 去主存中读取的值仍然为1, 并且 ++操作也非原子操作,多种可能都会导致结果不符合预期

如何实现线程安全

实现的方式有很多种

最简单常见的为使用二进制信号量或者mutex,例如

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>//sem_t semaphore;//定义信号量
pthread_mutex_t mutex;
int a=1;
void* myfun(){for(int i=0;i<10000;i++){
pthread_mutex_lock(&mutex);
//sem_wait(&semaphore);a++;
pthread_mutex_unlock(&mutex);
//sem_post(&semaphore);
return NULL;}
}int main(){//sem_init(&semaphore, 0, 1);
pthread_t t1, t2;
pthread_create(&t1, NULL,myfun, (void*)1);
pthread_create(&t2, NULL, myfun, (void*)2);
pthread_join(t1, NULL);
pthread_join(t2, NULL);//sem_destroy(&semaphore);
pthread_mutex_destroy(&mutex)}

semaphore 与 mutex 在底层由硬件cpu的原子指令以及缓存一致性协议与内存屏障保证其原子性

二者简单差异 为 semaphore 竞争失败时线程处于自旋状态,而mutex则让出cpu,增加了更多的上线文切换

在java 中常见的 synchronized 以及LOCK 都是使用mutex实现,例如

public class createFun {public static final Integer integer =1;public static int a=0;public static void main(String[] args) throws Exception{Thread t1= new Thread(new Runnable() {@Overridepublic void run() {add();}});Thread t2= new Thread(new Runnable() {@Overridepublic void run() {add();}});t1.start();t2.start();t1.join();t2.join();System.out.println("a="+a);}public  static void add(){for(int i=0;i<10000;i++) {synchronized (integer) {a++;}}}
}

http://www.dtcms.com/wzjs/221836.html

相关文章:

  • 阜阳哪里有做网站的网站排名软件
  • 宝安做棋牌网站建设找哪家公司好搜索网站的软件
  • 网站建设实例pdf下载班级优化大师怎么下载
  • 网站开发是前端吗百度推广排名代发
  • 企业怎么做网站做网站的公司深圳市龙华区
  • 外贸企业网站建设一条龙免费自己建网页
  • 猪八戒做网站 纠纷谷歌seo实战教程
  • 唐山网站制作服务公司免费招收手游代理
  • 建设的网站别人登录密码头条搜索
  • 怎样在在农行网站上做风险评估cms建站系统
  • 个人网站如何做淘宝客郴州网站建设网络推广平台
  • html做动态网站步骤与代码今日热点新闻大事件
  • 没有平台没有网站怎么做外贸模板建站平台
  • 苍南最好的网站建设公司seo快速排名首页
  • 武汉骑士网络做网站seo官网优化怎么做
  • 深圳建站公司 方网站免费产品推广软件
  • 网站建设专题页北京网聘咨询有限公司
  • 搭建本地网站做色流1688官网入口
  • 江西省委网站作风建设百度客服电话号码
  • PHP做克隆网站最常用的网页制作软件
  • 建设电影播放网站公众号推广平台
  • 怎样开网站卖东西网站设计制作哪家好
  • 淄博张店外贸建站公司东莞seo推广机构帖子
  • 郑州网站建设方案seo怎么才能优化好
  • 网站开发必备技能正规seo排名多少钱
  • wordpress编辑我东莞百度推广优化排名
  • 深圳网站建设服务中心网站关键词推广价格
  • 做网站满屏的照片尺寸是多少百度搜索排名规则
  • 怎么做同城网站百度推广托管公司
  • 如何加强企业网站建设 论文厦门人才网