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

中山市交通建设发展集团网站杭州pc网站开发公司有哪些

中山市交通建设发展集团网站,杭州pc网站开发公司有哪些,免费企业信息查询,公众号开发者id在哪找1.互斥量 a#xff09;互斥量#xff08;mutex#xff09;从本质上来说是一把锁#xff0c;一般在主线程中定义一个互斥量#xff0c;就是定义一把锁。然后根据我们的需求来对线程操作这把锁。 b#xff09;如果给所有的线程都加上锁了#xff0c;线程们会去争取内存空…1.互斥量 a互斥量mutex从本质上来说是一把锁一般在主线程中定义一个互斥量就是定义一把锁。然后根据我们的需求来对线程操作这把锁。 b如果给所有的线程都加上锁了线程们会去争取内存空间谁先争取到谁先运行直到该线程解锁后期间其他线程只能等待阻塞。 c因为主线程不上锁在先拿到锁的线程在跑的过程中主线程也会跟着跑。   include pthread.h // 返回若成功返回0否则返回错误编号 int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);创建锁 int pthread_mutex_lock(pthread_mutex_t *mutex);//加锁 int pthread_mutex_unlock(pthread_mutex_t *mutex);//解锁 int pthread_mutex_destroy(pthread_mutex_t *mutex);//销毁锁   互斥量用pthread_mutex_t数据类型表示。在使用互斥量前必须对它进行初始化可以通过调用pthread_mutex_init函数进行初始化。如果动态地分配互斥量例如通过调用malloc函数那么在释放内存前需要调用 pthread_mutex_destroy. 要用默认的属性初始化互斥量只需要把attr设置为NULL。     锁如果线程不希望被阻塞它可以使用pthread_mutex_trylock尝试对互斥量进行加锁。如果调用pthread_mutex_trylock时互斥量处于未锁住状态那么pthread_mutex_trylock将锁住互斥量不会出现阻塞并返回0否则pthread_mutex_trylock就会失败不能锁住互斥量而返回EBUSY。 2.加锁解锁简单操作 代码 #includestdio.h #includepthread.h #include unistd.hint data 0;//定义一个全局变量data pthread_mutex_t mutex;//创建一把锁 void *func1(void *arg) {int i;pthread_mutex_lock(mutex);//加锁for(i0;i5;i){printf(t1:thread id is:%ld\n,(unsigned long)pthread_self());printf(t1:is param:%d\n,*((int *)arg));sleep(1);}pthread_mutex_unlock(mutex);//解锁 } void *func2(void *arg) {pthread_mutex_lock(mutex);//加锁printf(t2:thread id is:%ld\n,(unsigned long)pthread_self());printf(t2:is param:%d\n,*((int *)arg));pthread_mutex_unlock(mutex);//解锁} void *func3(void *arg) {pthread_mutex_lock(mutex);//加锁printf(t3:thread id is:%ld\n,(unsigned long)pthread_self());printf(t3:is param:%d\n,*((int *)arg));pthread_mutex_unlock(mutex);//解锁} int main() {int ret;int param 100;pthread_t t1;pthread_t t2;pthread_t t3;pthread_mutex_init(mutex,NULL);//初始化锁ret pthread_create(t1,NULL,func1,(void *)param);//创建线程t1if(ret 0){printf(main:创建线程t1成功!\n);}ret pthread_create(t2,NULL,func2,(void *)param);//创建线程t2if(ret 0){printf(main:创建线程t2成功!\n);}ret pthread_create(t3,NULL,func3,(void *)param);//创建线程t3if(ret 0){printf(main:创建线程t3成功!\n);}printf(main:获取主程序的ID:%ld\n,(unsigned long)pthread_self());pthread_join(t1,NULL);pthread_join(t2,NULL);pthread_join(t3,NULL);return 0; } 结果: 先拿到锁的是t1线程先运行但是会和主线程争抢内存因为主线程没加锁虽然会被打断但是对于其他t2t3线程他们只有等待阻塞等t1先运行完 3.互斥锁限制共享内存的访问 #includestdio.h #includepthread.h #include unistd.h #includestdlib.h int data 0;//定义一个全局变量data pthread_mutex_t mutex;void *func1(void *arg) {pthread_mutex_lock(mutex);while(1){printf(线程t1拿到 data %d\n,data);sleep(1);if(data 5){printf(t1:data %d\n,data);pthread_mutex_unlock(mutex);printf(t1线程退出\n);exit(0);}}} void *func2(void *arg) {while(1){printf(线程t2拿到 data %d\n,data);pthread_mutex_lock(mutex);data;pthread_mutex_unlock(mutex);sleep(1);} } int main() {int ret;int param 100;pthread_t t1;pthread_t t2;pthread_mutex_init(mutex,NULL);ret pthread_create(t1,NULL,func1,(void *)param);//创建线程t1if(ret 0){printf(main:创建线程t1成功!\n);}ret pthread_create(t2,NULL,func2,(void *)param);//创建线程t2if(ret 0){printf(main:创建线程t2成功!\n);}printf(主线程main拿到data:%d\n,data);pthread_join(t1,NULL);pthread_join(t2,NULL);pthread_mutex_destroy(mutex);return 0; } 结果 t2解锁后t1一直拿锁知道循环结束整个程序退出因为是共享内存。 4.死锁 前提条件是定义了两把锁其中一个线程拿到了第一把锁和第二把锁另外的一个线程拿到了第二把锁和第一把锁然后他们都在争用锁的使用权因为都解他们各自拥有的第一把所所以一直卡在争用锁锁的使用权。 代码 #include stdio.h #include pthread.h//int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg); pthread_mutex_t mutex; pthread_mutex_t mutex2;int g_data0;void *func1(void *arg) {int i;pthread_mutex_lock(mutex);sleep(1);pthread_mutex_lock(mutex2);for(i0;i5;i){printf(t1:%ld thread is create\n,(unsigned long)pthread_self());printf(t1:param is %d\n,*((int*)arg));sleep(1);}pthread_mutex_unlock(mutex); } void *func2(void *arg) {pthread_mutex_lock(mutex2);sleep(1);pthread_mutex_lock(mutex);printf(t2:%ld thread is create\n,(unsigned long)pthread_self());printf(t2:param is %d\n,*((int*)arg));pthread_mutex_unlock(mutex);}int main() {int ret;int param100;pthread_t t1;pthread_t t2;pthread_mutex_init(mutex,NULL);pthread_mutex_init(mutex2,NULL);retpthread_create(t1,NULL,func1,(void*)param); if(ret0){printf(main:create t1 success\n);}retpthread_create(t2,NULL,func2,(void*)param);if(ret0){printf(main:create t2 success\n);}printf(main %ld \n,(unsigned long)pthread_self());pthread_join(t1,NULL);pthread_join(t2,NULL);pthread_mutex_destroy(mutex);pthread_mutex_destroy(mutex2);return 0; } 结果 main:create t1 success main:create t2 success main 139666438145792 ^C CLCEmbed_Learn:~/thread$ ./a.out main:create t1 success main:create t2 success main 139839917381376 ^C CLCEmbed_Learn:~/thread$ ./a.out main:create t1 success main:create t2 success main 139912974800640 ^C CLCEmbed_Learn:~/thread$ 只有1把锁的情况下是不会造成死锁的 在这里func1拿着锁mutex需要拿锁mutex2func2拿着锁mutex2需要拿锁mutex从而造成了死锁。
http://www.zqtcl.cn/news/509376/

相关文章:

  • 网站上线 流程网站左侧漂浮代码
  • 基于mvc4商务网站开发网站建设引言
  • 深圳网站设计师西安企业100强
  • dz网站数据备份购物网站配色怎么设计
  • 适合网站开发工程师的公司图片百度搜索
  • 网站界面设计需求wordpress single.php
  • 比较权威的房产网站合肥瑶海区地图全图高清版
  • 网站建设公司果动小学电教检查网站建设资料
  • 电子商务网站设计成功的要素青岛网页设计师
  • 门户网站平台建设方案网站开发后如何上线
  • 濮阳做网站的番禺区网络推广渠道
  • 杭州网站seo外包外链图片
  • 苏州网站建设有限公司枣阳建网站
  • 网站开发平台选择如何制作购物网站
  • 专业建设网站企业外包公司企业网站
  • 网站开发需求确认书国家商标注册官网查询系统
  • 国内个人网站建设wordpress 添加搜索
  • 网站建设创新简述网站开发具体流程
  • wordpress小说网站模板南宁企业网站seo
  • 网站开发与设计课程时间网站推广的搜索引擎推广
  • 网站首页幻灯片不显示网页设计制作项目
  • 遂宁网站建设哪家好深圳做响应式网站设计
  • 慈溪建设企业网站wordpress 增加分类字段
  • 毕业设计做系统网站wordpress修改评论框
  • 上海网站开发孵化设计者联盟官网
  • 旅游网站开发需求报告微信创建小程序
  • 不收费推广网站有哪些h5网站要多久
  • seo网站营销推广全...互联网创业好项目
  • vx小程序制作网站优化标题怎么做
  • 做旅游网站课程设计报告湘潭学校网站建设 x磐石网络