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

医疗方面的网站建设上海网站备案网站

医疗方面的网站建设,上海网站备案网站,qplayer wordpress,互联网平面设计是干什么的与互斥锁相关API 互斥量#xff08;mutex#xff09;从本质上来说是一把锁#xff0c;在访问共享资源前对互斥量进行加锁#xff0c;在访问完成后释放互斥量上的锁。对互斥量进行加锁后#xff0c;任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互…与互斥锁相关API       互斥量mutex从本质上来说是一把锁在访问共享资源前对互斥量进行加锁在访问完成后释放互斥量上的锁。对互斥量进行加锁后任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞所有在该互斥锁上的阻塞线程都会变成可运行状态第一个变为可运行状态的线程可以对互斥量加锁其他线程将会看到互斥锁依然被锁住只能回去等待它重新变为可用。在这种方式下每次只有一个线程可以向前运行。 在设计时需要规定所有的线程必须遵守相同的数据访问规则。只有这样互斥机制才能正常工作。操作系统并不会做数据访问的串行化。如果允许其中的某个线程在没有得到锁的情况下也可以访问共享资源那么即使其它的线程在使用共享资源前都获取了锁也还是会出现数据不一致的问题。 互斥变量用pthread_mutex_t数据类型表示。在使用互斥变量前必须对它进行初始化可以把它置为常量PTHREAD_MUTEX_INITIALIZER只对静态分配的互斥量也可以通过调用pthread_mutex_init函数进行初始化。如果动态地分配互斥量例如通过调用malloc函数那么在释放内存前需要调用pthread_mutex_destroy。 1. 创建及销毁互斥锁 #include pthread.h int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); int pthread_mutex_destroy(pthread_mutex_t *restrict mutex); // 返回若成功返回0否则返回错误编号要用默认的属性初始化互斥量只需把attr设置为NULL。 2. 加锁及解锁 #include pthread.h int pthread_mutex_lock(pthread_mutex_t *restrict mutex); int pthread_mutex_trylock(pthread_mutex_t mutex); int pthread_mutex_unlock(pthread_mutex_t *restrict mutex); // 返回若成功返回0否则返回错误编号如果线程不希望被阻塞它可以使用pthread_mutex_trylock尝试对互斥量进行加锁。如果调用pthread_mutex_trylock时互斥量处于未锁住状态那么pthread_mutex_trylock将锁住互斥量不会出现阻塞并返回0否则pthread_mutex_trylock就会失败不能锁住互斥量而返回EBUSY。 代码示例 #includestdio.h #includepthread.h //int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);int g_data0; pthread_mutex_t mutex;//定义一个互斥量也就是锁void*func1(void *arg) {int i;pthread_mutex_lock(mutex);//给互斥量上锁for(i0;i5;i){printf(t1 :%ld thread is created\n,(unsigned long)pthread_self());printf(t1:param is %d\n,*((int*)arg));}pthread_mutex_unlock(mutex);//给互斥量解锁}void*func2(void *arg) {pthread_mutex_lock(mutex);//给互斥量上锁printf(t2 :%ld thread is created\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);//初始化互斥量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);//用来等待进程t1退出pthread_join(t2,NULL);//用来等待进程t2退出pthread_mutex_destroy(mutex);//销毁这把锁return 0; } 脚本可以这样写 CLCEmbed_Learn:~/xiancheng$ vi test.sh CLCEmbed_Learn:~/xiancheng$ chmod x test.sh CLCEmbed_Learn:~/xiancheng$ ./test.sh //其中test.sh中写入要运行的程序实现进程t1满足条件退出代码 #includestdio.h #includepthread.h #include stdlib.h //int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);int g_data0;//pthread_mutex_t mutex;void*func1(void *arg) {printf(t1 :%ld thread is created\n,(unsigned long)pthread_self());printf(t1:param is %d\n,*((int*)arg));pthread_mutex_lock(mutex);while(1){printf(t1 printf is %d\n,g_data);sleep(1);if(g_data3){pthread_mutex_unlock(mutex);printf(t1 over\n);//pthread_exit(NULL);exit(0);}}}void*func2(void *arg) {printf(t2 :%ld thread is created\n,(unsigned long)pthread_self());printf(t2:param is %d\n,*((int*)arg));while(1){printf(t2 printf is %d\n,g_data);pthread_mutex_lock(mutex);g_data; pthread_mutex_unlock(mutex);sleep(1);}pthread_mutex_unlock(mutex); }int main() {int ret;int param100;pthread_t t1;pthread_t t2;pthread_mutex_init(mutex,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());while(1){printf(main printf is %d\n,g_data);sleep(1);}pthread_join(t1,NULL);pthread_join(t2,NULL);pthread_mutex_destory(mutex);return 0; }什么情况下造成死锁       死锁 是指两个或两个以上的进程在执行过程中由于竞争资源或彼此通信而造成的一种阻塞现象无外力作用他们都将无法再推进下去。一般需要两个mutex 代码示例 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 created\n,(unsigned long)pthread_self());printf(t1:param is %d\n,*((int*)arg));}pthread_mutex_unlock(mutex);}void*func2(void *arg) {pthread_mutex_lock(mutex2);sleep(1);pthread_mutex_lock(mutex);printf(t2 :%ld thread is created\n,(unsigned long)pthread_self());printf(t2:param is %d\n,*((int*)arg));pthread_mutex_unlock(mutex);}参考博文https://www.cnblogs.com/xiehongfeng100/p/4620852.html
http://www.pierceye.com/news/993275/

相关文章:

  • 介绍家乡的网站怎么做天眼查企业查询公司
  • 公司网站建设代理一般做多久苏州关键词优化企业
  • 北京网站网站建设vps做网站怎么加速
  • 销售网站怎么做一个公司可以做多少网站
  • 西安旅游攻略必去景点网站优化成都哪里好
  • 网站特色泉州做网站优化价格
  • 小米官方网站开发版在哪里推进门户网站建设 用好用活
  • 玉器企业网站源码软件商店哪个好用
  • 学校网站建设的安全策略江苏太平洋建设集团官方网站
  • 织梦做中英文企业网站给特宝网站商家网址怎样做
  • 网站邮箱接口怎么设置WordPress国外主机
  • 西安做网站的公司哪家好怎么样查询网站被挂黑链
  • 卯兔科技网站建设河南旅游集团 网站建设
  • 重庆网站建设c做食品网站的素材
  • 网站如何制作的简单的管理系统有哪些
  • 职高网站建设知识点一个人开发一个网站需要多久
  • c 做的网站怎么上传博客 选择 WordPress
  • dw可以做有后台的网站么?泰安抖音seo
  • 龙岗网站建设 信科网络网站备案后要做什么
  • 深圳建立网站公司网站公众号开发一般收费
  • 网站建设要做什么有关网站建设的书
  • 网站前台开发由什么做的seo网络贸易网站推广
  • 网站设计与开发范本wordpress 左图右文
  • 网站后台的搭建seo网站推广教程
  • 长春做网站的公司男生怎么找的小资源
  • 在线课程网站建设规范甘肃手机版建站系统信息
  • 自定义网站模板中国进出口企业名录
  • 晟合建设集团网站高中文凭能学做网站吗
  • 黑色网站模板建筑工程查询网
  • 建设网站jw100有哪些做鞋机设备的网站