1. #include <stdio.h>
  2.  
  3. #include <pthread.h>
  4.  
  5. pthread_t work1Id;
  6.  
  7. pthread_t work2Id;
  8.  
  9. int work1Ret = ;
  10.  
  11. int work2Ret = ;
  12.  
  13. pthread_cond_t cond_ready = PTHREAD_COND_INITIALIZER;
  14.  
  15. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  16.  
  17. int number = ;
  18.  
  19. void* Work1(void* args)
  20.  
  21. {
  22.  
  23. int i = ;
  24.  
  25. printf("I am work%d\n", *((int*)args));
  26.  
  27. for(i = ; i < ; i++)
  28.  
  29. {
  30.  
  31. pthread_mutex_lock(&mutex);
  32.  
  33. number++;
  34.  
  35. if(number%==)
  36.  
  37. {
  38.  
  39. printf("I am work%d, Finish\n", *((int*)args));
  40.  
  41. pthread_cond_signal(&cond_ready);
  42.  
  43. sleep();
  44.  
  45. }
  46.  
  47. pthread_mutex_unlock(&mutex);
  48.  
  49. printf("I am work%d, number = %d and unlock \n", *((int*)args), number);
  50.  
  51. sleep();
  52.  
  53. }
  54.  
  55. return &work1Ret;
  56.  
  57. }
  58.  
  59. void* Work2(void* args)
  60.  
  61. {
  62.  
  63. printf("I am work%d\n", *((int*)args));
  64.  
  65. while(number <)
  66.  
  67. {
  68.  
  69. pthread_mutex_lock(&mutex);
  70.  
  71. if(number <= )
  72.  
  73. {
  74.  
  75. pthread_cond_wait(&cond_ready, &mutex);
  76.  
  77. printf("I am work%d, number = %d receive SIG\n", *((int*)args), number);
  78.  
  79. }
  80.  
  81. pthread_mutex_unlock(&mutex);
  82.  
  83. }
  84.  
  85. return &work2Ret;
  86.  
  87. }
  88.  
  89. int main()
  90.  
  91. {
  92.  
  93. int args1 = ;
  94.  
  95. int args2 = ;
  96.  
  97. void* work1Ret = NULL;
  98.  
  99. void* work2Ret = NULL;
  100.  
  101. pthread_create(&work1Id, NULL, Work1, &args1);
  102.  
  103. pthread_create(&work2Id, NULL, Work2, &args2);
  104.  
  105. pthread_join(work1Id, &work1Ret);
  106.  
  107. if(work1Ret != NULL)
  108.  
  109. {
  110.  
  111. printf("work1Ret = %d\n", *((int*)work1Ret));
  112.  
  113. }
  114.  
  115. pthread_join(work2Id, &work2Ret);
  116.  
  117. if(work2Ret != NULL)
  118.  
  119. {
  120.  
  121. printf("work2Ret = %d\n", *((int*)work2Ret));
  122.  
  123. }
  124.  
  125. return ;
  126.  
  127. }

互斥锁Demo的更多相关文章

  1. Windows互斥锁demo和分析

    一:windows创建锁接口 创建互斥锁的方法是调用函数CreateMutex HANDLE CreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes, ...

  2. RT-Thread互斥锁

    互斥锁和信号量很相似, RT-Thread 中的互斥锁也有静态和动态之分,和互斥锁有关的操作如下:初始化—rt_mutex_init()(对应静态互斥锁):建立—rt_mutex_create()(对 ...

  3. zookeeper实现互斥锁

    简单的说,zookeeper就是为了解决集群环境中数据一致性的问题. 举个很简单栗子: 有一个变量A,分别存在于两台服务器中,某个程序需要用到变量A,就随机地访问其中一台服务器并取得变量A的值,对吧? ...

  4. Python中线程与互斥锁

    了解之前我们先了解一下什么是多任务? 概念: 几个不同的事件在同时运行就是多任务, 这样的话, 我们有牵扯到了真的多任务, 假的多任务; 并行: 真的多任务, 通过电脑的核数来确定 并发: 假的多任务 ...

  5. 单机Redis实现分布式互斥锁

    代码地址如下:http://www.demodashi.com/demo/12520.html 0.准备工作 0-1 运行环境 jdk1.8 gradle 一个能支持以上两者的代码编辑器,作者使用的是 ...

  6. 10.Go-goroutine,waitgroup,互斥锁和channel

    10.1.goroutine goroutine的使用 //Learn_Go/main.go package main import ( "fmt" "time" ...

  7. 子进程回收资源两种方式,僵尸进程与孤儿进程,守护进程,进程间数据隔离,进程互斥锁,队列,IPC机制,线程,守护线程,线程池,回调函数add_done_callback,TCP服务端实现并发

    子进程回收资源两种方式 - 1) join让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源. - 2) 主进程 “正常结束” ,子进程与主进程一并被回收资源. from multipr ...

  8. Go 互斥锁(sync.Mutex)和 读写锁(sync.RWMutex)

    什么时候需要用到锁? 当程序中就一个线程的时候,是不需要加锁的,但是通常实际的代码不会只是单线程,所以这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢? 多个线程在读相同的数据时 多个线程 ...

  9. 10.Go-goroutine,waitgroup,互斥锁,channel和select

    10.1.goroutine goroutine的使用 //Learn_Go/main.go package main import ( "fmt" "time" ...

随机推荐

  1. 关于Burp Suite不能抓包的解决方法

    一.Burp Suite有时能抓到包,有时不能抓到包 解决方法: 出现这种问题的原因就是代理没有设置成全局的,只是设置成了局部的. 打开IE浏览器,依次打开工具->Internet 属性-> ...

  2. 原来... 用debug如何查看当前标志寄存器的标志位值?

    -r 用这个指令,得到的信息右下角: NV   UP   EI   PL   NZ   NA   PO   NC这些符号代表的就是标志寄存器里常用标志位的值. 这个是符号值对应表: 溢出标志OF(Ov ...

  3. EFK搜集MySQL慢日志

    前提已经安装好EFK 1.在MySQL节点安装td-agent http://packages.treasuredata.com.s3.amazonaws.com/3/redhat/7/x86_64/ ...

  4. MySQL coalesce函数用法说明(转)

    在mysql中,其实有不少方法和函数是很有用的,一个叫coalesce的,作用是将返回传入的参数中第一个非null的值,比如 SELECT COALESCE(NULL, NULL, 1); -- Re ...

  5. IOS 基于APNS消息推(JAVA后台)

    直接上Demo import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUti ...

  6. JS-日期和时间

    # 格式化日期和时间 扩展 Date: Date.prototype.format = function(format){ var o = { "M+" : this.getMon ...

  7. Python 定时任务框架 APScheduler 详解

    APScheduler 最近想写个任务调度程序,于是研究了下 Python 中的任务调度工具,比较有名的是:Celery,RQ,APScheduler. Celery:非常强大的分布式任务调度框架 R ...

  8. Windows下搭建Wampserver+Wordpress

    安装wordpress windows 下载安装包 百度云 提取码:qxzp 安装wamp WampServer就是Windows Apache Mysql PHP集成安装环境,即在window下的a ...

  9. HDU3450_Counting Sequences

    题意: 让你从所给的序列中找到他的子序列,使他们相邻之间差距不超过d,问有多少个转移的子序列 这题第一眼大概就知道是状态转移,sum[i]表示以前i个中有多少个,那么sum[i+1]比sum[i] 多 ...

  10. MySQL用户管理及权限设置

    mysql 用户管理和权限设置 用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql ...