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

消防做ccc去那个网站做网站价格miniuinet

消防做ccc去那个网站,做网站价格miniuinet,wordpress子目录404,创新的网站http://www.cnblogs.com/yuuyuu/p/5143881.html 一.概述 读写锁与互斥量的功能类似#xff0c;对临界区的共享资源进行保护#xff01;互斥量一次只让一个线程进入临界区#xff0c;读写锁比它有更高的并行性。读写锁有…http://www.cnblogs.com/yuuyuu/p/5143881.html 一.概述                                                    读写锁与互斥量的功能类似对临界区的共享资源进行保护互斥量一次只让一个线程进入临界区读写锁比它有更高的并行性。读写锁有以下特点 1.如果一个线程用读锁锁定了临界区那么其他线程也可以用读锁来进入临界区这样就可以多个线程并行操作。但这个时候如果再进行写锁加锁就会发生阻塞写锁请求阻塞后后面如果继续有读锁来请求这些后来的读锁都会被阻塞这样避免了读锁长期占用资源防止写锁饥饿 2.如果一个线程用写锁锁住了临界区那么其他线程不管是读锁还是写锁都会发生阻塞 二.函数接口                                            1.创建读写锁 1.1宏常量初始化 1 pthread_rwlock_t rwlock PTHREAD_RWLOCK_INITIALIZER; 1.2函数初始化 1 #include pthread.h 2 3 int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr); rwlock读写锁的pthread_rwlock_t结构指针 attr读写锁的属性结构指针。不需要别的属性默认为NULL。 2.读写锁加锁与解锁 1 #include pthread.h 2 3 int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); 4 int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); 5 int pthread_rwlock_unlock(pthread_rwlock_t *rwlock); rwlock创建的读写锁指针 3.其他类型的加锁 1 #include pthread.h 2 #include time.h 3 4 5 int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock); 6 int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock); 7 8 int pthread_rwlock_timedrdlock(pthread_rwlock_t *restrict rwlock, const struct timespec *restrict abs_timeout); 9 int pthread_rwlock_timedwrlock(pthread_rwlock_t *restrict rwlock, const struct timespec *restrict abs_timeout); try类函数加锁如果获取不到锁会立即返回错误EBUSY timed类函数加锁如果规定的时间内获取不到锁会返回ETIMEDOUT错误 4.销毁读写锁 1 #include pthread.h 2 3 int pthread_rwlock_destroy(pthread_rwlock_t *rwlock); 三.简单的例子                                         创建4个线程2个线程读锁2个线程写锁观察4个线程进入临界区的顺序 1 /**2 * file pthread_rwlock.c3 */4 5 #include stdio.h6 #include stdlib.h7 #include string.h8 #include unistd.h9 #include pthread.h 10 11 /* 初始化读写锁 */ 12 pthread_rwlock_t rwlock PTHREAD_RWLOCK_INITIALIZER; 13 /* 全局资源 */ 14 int global_num 10; 15 16 void err_exit(const char *err_msg) 17 { 18 printf(error:%s\n, err_msg); 19 exit(1); 20 } 21 22 /* 读锁线程函数 */ 23 void *thread_read_lock(void *arg) 24 { 25 char *pthr_name (char *)arg; 26 27 while (1) 28 { 29 /* 读加锁 */ 30 pthread_rwlock_rdlock(rwlock); 31 32 printf(线程%s进入临界区global_num %d\n, pthr_name, global_num); 33 sleep(1); 34 printf(线程%s离开临界区...\n, pthr_name); 35 36 /* 读解锁 */ 37 pthread_rwlock_unlock(rwlock); 38 39 sleep(1); 40 } 41 42 return NULL; 43 } 44 45 /* 写锁线程函数 */ 46 void *thread_write_lock(void *arg) 47 { 48 char *pthr_name (char *)arg; 49 50 while (1) 51 { 52 /* 写加锁 */ 53 pthread_rwlock_wrlock(rwlock); 54 55 /* 写操作 */ 56 global_num; 57 printf(线程%s进入临界区global_num %d\n, pthr_name, global_num); 58 sleep(1); 59 printf(线程%s离开临界区...\n, pthr_name); 60 61 /* 写解锁 */ 62 pthread_rwlock_unlock(rwlock); 63 64 sleep(2); 65 } 66 67 return NULL; 68 } 69 70 int main(void) 71 { 72 pthread_t tid_read_1, tid_read_2, tid_write_1, tid_write_2; 73 74 /* 创建4个线程2个读2个写 */ 75 if (pthread_create(tid_read_1, NULL, thread_read_lock, read_1) ! 0) 76 err_exit(create tid_read_1); 77 78 if (pthread_create(tid_read_2, NULL, thread_read_lock, read_2) ! 0) 79 err_exit(create tid_read_2); 80 81 if (pthread_create(tid_write_1, NULL, thread_write_lock, write_1) ! 0) 82 err_exit(create tid_write_1); 83 84 if (pthread_create(tid_write_2, NULL, thread_write_lock, write_2) ! 0) 85 err_exit(create tid_write_2); 86 87 /* 随便等待一个线程防止main结束 */ 88 if (pthread_join(tid_read_1, NULL) ! 0) 89 err_exit(pthread_join()); 90 91 return 0; 92 } 2个线程函数的临界区里面都sleep(1)测试给足够的时间看其他线程能不能进来。64行写锁函数里面sleep(2)因为写锁请求会阻塞后面的读锁2个写锁一起请求会让读锁饥饿所以比39行的sleep(1)多一秒 编译运行 可以看到读锁可以一起进入临界区而写锁在临界区里面等1秒都不会有其他线程能进来
http://www.sadfv.cn/news/205239/

相关文章:

  • 优秀平面设计网站seo公司哪家好咨询
  • 大网站建设个人网站图片
  • 2017年网站建设招标书变身 变装 wordpress
  • 微网站建设包括哪些h5网站模板源码
  • 政务网站系统wordpress搭建商城网站
  • 网站负责人 主体负责人wordpress调用tag标签
  • 建设网站的目的及功能定位东莞市公司网站建设平台
  • 怎么修改网站的域名哪个cms好用
  • 天津地产网站建设凡科网站备案
  • 网站建设免费模板下载交通信息华建设网站
  • 上海闵行区官网qq群排名优化
  • seo引擎搜索网站关键词年度网站信息化建设工作计划
  • 旅游网站模板库麻涌建设网站
  • 锦州滨海新区城市建设规划网站网站开发项目描述
  • 做哪一类的网站可以短时间变现平台推广引流怎么做
  • 风中有朵雨做的云电影网站深圳品牌网站制作多少钱
  • 宁波专业的网站建设团队中小企业网址
  • 如何做网站搬家北京WordPress爱好者
  • 仿网站被封怎么办外贸网站怎么推广
  • 做的网站百度上可以搜到吗如何用手机网站做淘宝客
  • 建设网站用哪个好网站设计中怎么显示链接内容
  • 上海网站建设 报价泉州免费网站制作
  • 杭州制作网站的公司织梦动漫网站模板
  • 湖北省住房建设部官方网站苏州网页设计app
  • 站酷网页版seo臻系统
  • IC 网站建设建设建材网站的目的
  • 做分类信息网站赚钱吗企业的网站建设需要做什么
  • 一款蛋糕食品类企业手机网站源码电商企业网站建设的一般要素有哪些6
  • 深圳哪个公司做网站好源码做微信电影网站
  • 印象网站建设律所网站方案