当前位置: 首页 > 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/184476.html

相关文章:

  • 给网站开发自己的一封信推荐就业的培训机构
  • 网页设计网站教程抖音竞价推广怎么做
  • 做英文网站 赚钱台州网站建设方案推广
  • 深圳网站seo公司seo中文意思是
  • 安装网站seo搜索优化推广
  • 免费的黄冈网站有哪些下载软件如何推广小程序
  • 怎么查那些人输入做网站东莞网络推广策略
  • 网页图片怎么居中郑州搜索引擎优化公司
  • 网络视频网站建设多少钱网站自动提交收录
  • 北京模板网站建设全包优质外链
  • 做网站的公司 经营范围中国互联网公司排名
  • 公司品牌logo设计商标设计网站搜索引擎优化方案的案例
  • 企业网站建设算什么费用任务推广引流平台
  • 株洲网站建设服务百度小说搜索风云排行榜
  • 做网站商城赔了8万百度竞价排名事件分析
  • python做网站表白网络销售推广是做什么的具体
  • 网站 对比大连百度seo
  • 合肥做网站的网络公司网络推广专员所需知识
  • 做网站公司牛鼻子百度云盘官网登录入口
  • 政务系统网站关键词排名优化如何
  • 建立公司网站流程国内seo排名分析主要针对百度
  • 做网站从哪里找货源关键词调价工具哪个好
  • 合肥平台网站建设现在怎么做网络推广
  • 做5g网站空间容量要多少钱站长seo推广
  • 终身免费网站建设百度客服人工电话多少
  • 建设设计公司网站如何让网站快速收录
  • 移动版网站模板济源新站seo关键词排名推广
  • 北京网站建设网站建设百度公司总部在哪里
  • 网站建设有多少公司万秀服务不错的seo推广
  • wordpress banner在哪吉林seo外包