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

国外ps教程网站老板办公室装修效果图

国外ps教程网站,老板办公室装修效果图,wordpress 固定链接 id,汕尾网站seo类似与进程间通信信号量的加锁解锁。 对互斥量进行加锁后#xff0c;任何其他试图在此对互斥量加锁的线程都会被阻塞#xff0c;直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程被阻塞#xff0c;所有在该互斥锁上的阻塞线程都会变成可运行状态#xff0c;第一个变…类似与进程间通信信号量的加锁解锁。 对互斥量进行加锁后任何其他试图在此对互斥量加锁的线程都会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程被阻塞所有在该互斥锁上的阻塞线程都会变成可运行状态第一个变为可运行状态的线程可以对互斥量加锁其他线程将会看到互斥量依旧被锁住只能回去等待它重新变为可用。在这种方式下每次只有一个线程可以向前运行。 在设计时需要规定所有的线程必须遵守相同的数据访问规则只有这样互斥机制才能正常工作。如果允许其中的某个线程在没有得到锁的情况下也可以访问共享资源那么即使其他的线程在使用共享资源前都获取了锁也还是会出现数据不一致的问题。 互斥变量用pthread_mutex_t数据类型表示。在使用互斥变量前必须对它进行初始化可以把它置为常量。 PTREAD_MUTEX-INITIALIZWE(只对静态分配的互斥量)也可以通过调用pthread_mutex_init函数对其进行初始化。如果动态的分配互斥量例如调用malloc,那么在释放内存前需要调用pthread_mutex_destory。 创建互斥锁 函数原型 int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); 参数 pthread_mutex_t *restrict mutex锁的地址。 onst pthread_mutexattr_t *restrict attr锁的属性可以是NULL默认属性创建锁 返回值 若成功返回0否则返回错误编号 销毁互斥锁 函数原型 int pthread_mutex_destroy(pthread_mutex_t *mutex); 参数 pthread_mutex_t *mutex:锁的地址。 返回值 若成功返回0否则返回错误编号 加锁、解锁 函数原型 int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); 返回值 若成功返回0否则返回错误编号 如果线程不希望被阻塞它可以使用pthread_mutex_trylock尝试对互斥量进行加锁。如果调用pthread_mutex_trylock时互斥量处于未锁住状态那么pthread_mutex_trylock将锁住互斥量不会出现阻塞并返回0否则pthread_mutex_trylock就会失败不能锁住互斥量而返回EBUSY。 示例1 在前面一节提出了一个问题怎么保证t1线程先运行我们可以把g_data作为一个互斥量对它进行加锁、解锁就可以实现。 #include stdio.h #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 *mutex); //int pthread_mutex_lock(pthread_mutex_t *mutex); //int pthread_mutex_trylock(pthread_mutex_t *mutex); //int pthread_mutex_unlock(pthread_mutex_t *mutex); int g_data0;pthread_mutex_t mutex;void *func1(void *arg) {int i;pthread_mutex_lock(mutex);for(i0;i3;i){printf(t1:%ld thread is creart\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(mutex);printf(t2:%ld thread is creart\n,(unsigned long)pthread_self());printf(t2:param is %d\n,*((int *)arg));pthread_mutex_unlock(mutex); }int main() {int param100;char *pretNULL;int ret1;int ret2; pthread_t t1;pthread_t t2;pthread_mutex_init(mutex,NULL);ret1pthread_create(t1, NULL,func1, (void *)param);ret2pthread_create(t1, NULL,func2, (void *)param);if(ret1 0){printf(main:create t1 successed\n);}if(ret2 0){printf(main:create t2 successed\n);}printf(main:%ld\n,(unsigned long)pthread_self());pthread_join(t1,NULL);printf(main: t1 quit:%s\n,pret);pthread_join(t2,NULL);printf(main: t2 quit:%s\n,pret);pthread_mutex_destroy(mutex);return 0; } 上面代码运行的结果来看无论运行多少次代码都是t1线程运行完毕后t2线程才运行。main函数不在t1后运行的原因时main线程并没有参与互斥锁的加锁解锁。 示例2互斥锁限制共享资源的访问 前面一节还提到了一个问题如何保证g_data3 时 t1 线程退出 #include stdio.h #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 mutex); //int pthread_mutex_lock(pthread_mutex_t mutex); //int pthread_mutex_trylock(pthread_mutex_t mutex); //int pthread_mutex_unlock(pthread_mutex_t mutex);int g_data0;void *func1(void *arg) {printf(t1:%ld thread is creart\n,(unsigned long)pthread_self());printf(t1:param is %d\n,*((int *)arg));pthread_mutex_lock(mutex);while(1){printf(t1:%d\n,g_data);sleep(1);if(g_data3){printf(\n);pthread_mutex_unlock(mutex);pthread_exit(NULL);}}}void *func2(void *arg) {printf(t2:%ld thread is creart\n,(unsigned long)pthread_self());printf(t2:param is %d\n,*((int *)arg));while(1){printf(t2:%d\n,g_data);pthread_mutex_lock(mutex);g_data;pthread_mutex_unlock(mutex);sleep(1);} }int main() {int param100;char *pretNULL;int ret1;int ret2;pthread_t t1;pthread_t t2;pthread_mutex_init(mutex,NULL);ret1pthread_create(t1, NULL,func1, (void *)param);ret2pthread_create(t1, NULL,func2, (void *)param);if(ret1 0){printf(main:create t1 successed\n);}if(ret2 0){printf(main:create t2 successed\n);}printf(main:%ld\n,(unsigned long)pthread_self());while(1){printf(main:%d\n,g_data);sleep(1);}pthread_join(t1,NULL);pthread_join(t2,NULL);pthread_mutex_destroy(mutex);return 0; }因为在g_data到达3之前t1至少会被运行一次所以可以运行t1时加锁直到g_data3t1退出在解锁就可以实现。可以看到以上戴拿运行情况只要运行到t1线程g_data3时就退出再去运行t2和main。
http://www.hkea.cn/news/14504918/

相关文章:

  • wordpress网站标签logo什么网站权重高
  • 网站建设怎么样找客户快网站定制一般价格多少
  • 网站建设与运营的市场折扣券网站怎么做
  • 网站开发方倍工作室wordpress不同页面布局
  • 济南网站建设第六网建wordpress引用抖音视频
  • 做照片模板下载网站好中小型网站建设多少钱
  • 2003怎么建设网站空间怎么仿网站
  • 泉州网站seo外包公司创建全国文明城市总结
  • 具有品牌的微网站建设网站开发类论文题目
  • 网站的动画广告横幅怎么做的网站建设背景图片大小的修改
  • 做网站要提供什么建网站做代理ip
  • 洪都建设集团有限公司网站怎么编辑网页
  • 哪些网站是用jsp做的免费进出货管理软件app
  • access数据库做网站wordpress 防篡改
  • 茌平网站制作企业宣传册模板
  • wordpress 批量建站网站服务器的安全性首先是实现用户账号的权限设置
  • 阿里云里做网站能上百度首页么qq网页版一键登录
  • 邯郸网站建设选哪家好服务器上装wordpress
  • 上海门户网站制作公司湘潭市建设工程质量监督站网站
  • 网站做301跳转的方法云计算运维工程师
  • 做自己个人网站项目建设流程
  • 怎么制做网站英文定机票网站建设
  • 徐汇区网站建设公司城乡住房和城乡建设部网站
  • 女生自己做网站深圳那家做APP网站的最好
  • 网站用户引导怎么用ftp管理网站
  • 怎么制作外贸网站网站文章百度不收录
  • 温州外贸网站制作如何把网站放到百度
  • 制作网站报价电商一件代发平台
  • 门户网站价格什么网站可以自己做字
  • 国内移动端网站做的最好的连云港建设工程安全网站