1. //#include <stdio.h>
  2. //#include <stdlib.h>
  3. //#include <unistd.h>
  4. #include <windows.h>
  5. //#include <pthread.h>
  6. #include <mutex>
  7. #include <thread>
  8. #include <string.h>
  9. using namespace std;
  10. char* buf[5]; //字符指针数组 全局变量
  11. int pos; //用于指定上面数组的下标
  12. //1.定义互斥量
  13. //pthread_mutex_t mutex; // linux
  14. mutex mtx; // C++11
  15. HANDLE g_hMutex = INVALID_HANDLE_VALUE; // Win
  16. void *task(void *p)
  17. {
  18. //3.使用互斥量进行加锁
  19. //pthread_mutex_lock(&mutex); // linux
  20. //mtx.lock(); // C++11
  21. WaitForSingleObject(g_hMutex, INFINITE);//等待互斥量 Win
  22. buf[pos] = (char *)p;
  23. printf("task %d\r\n", pos);
  24. //sleep(1); // linux
  25. Sleep(500); // Win
  26. pos++;
  27. //4.使用互斥量进行解锁
  28. //pthread_mutex_unlock(&mutex); // linux
  29. //mtx.unlock(); // C++11
  30. ReleaseMutex(g_hMutex);//释放互斥量 // Win
  31. return 0;
  32. }
  33. int main(void)
  34. {
  35. //2.初始化互斥量, 默认属性
  36. //pthread_mutex_init(&mutex, NULL); // linux
  37. g_hMutex = CreateMutex(nullptr, false, nullptr); // Win
  38. //1.启动一个线程 向数组中存储内容
  39. //pthread_t tid, tid2; // linux
  40. //pthread_create(&tid, NULL, task, (void *)"woainia!"); // linux
  41. //pthread_create(&tid2, NULL, task, (void *)"how"); // linux
  42. // CreateThread(nullptr,0...) // Win
  43. thread th1(task, (void *)"woainia!"); // C++
  44. thread th2(task, (void *)"how"); // C++
  45. //2.主线程进程等待,并且打印最终的结果
  46. //pthread_join(tid, NULL); // linux
  47. //pthread_join(tid2, NULL); // linux
  48. th2.join(); // C++
  49. th1.join(); // C++
  50. //5.销毁互斥量
  51. //pthread_mutex_destroy(&mutex); // linux
  52. CloseHandle(g_hMutex); // Win
  53. Sleep(5000);
  54. int i = 0;
  55. printf("字符指针数组中的内容是:pos:%d \r\n", pos);
  56. for (i = 0; i < pos; ++i)
  57. {
  58. printf("%d : %s \n", i, buf[i]);
  59. }
  60. printf("\n");
  61. system("pause");
  62. return 0;
  63. }

mutex,thread的更多相关文章

  1. mutex,thread(c++11 windows linux三种方式)

    一 c++11  windows linux三种方式 //#include <stdio.h> //#include <stdlib.h> //#include <uni ...

  2. Thread and shared lock

    在看programing python 4th,第5张parallel system tool 192页开始,书中讲到thread知识,以下做个笔记,以便后期学习 1.主线程执行,开启5个子线程进行计 ...

  3. mutex 互斥量

    有用参考:http://blog.csdn.net/yl2isoft/article/details/46003467 摘抄记录:using System.Threading; class Examp ...

  4. 线程同步方式之互斥量Mutex

    互斥量和临界区非常相似,只有拥有了互斥对象的线程才可以访问共享资源,而互斥对象只有一个,因此可以保证同一时刻有且仅有一个线程可以访问共享资源,达到线程同步的目的. 互斥量相对于临界区更为高级,可以对互 ...

  5. C# 多线程系列之Mutex使用

    互斥量是一个内核对象,它用来确保一个线程独占一个资源的访问,并且互斥量可以用于不同进程中的线程互斥访问资源. 我们可以把Mutex看作一个出租车,乘客看作线程.乘客首先等车,然后上车,最后下车.当一个 ...

  6. c++11多线程---线程锁(mutex)

    #include<mutex> 包含四类锁: 1      std::mutex    最基本也是最常用的互斥类 2      std::recursive_mutex  同一线程内可递归 ...

  7. <<面向模式的软件架构2-并发和联网对象模式>>读书笔记

    服务访问和配置模式 Wrapper Facade可以将有非对象API提供的函数和数据封装到面向对象的类接口中 就是把底层API再封装一次,让外部不用关心是调用哪个平台的API,不如锁,在不同的平台上可 ...

  8. 并发编程中.net与java的一些对比

    Java在并发编程中进行使用java.util.concurrent.atomic来处理一些轻量级变量 如AtomicInteger AtomicBoolean等 .Net中则使用Interlocke ...

  9. perl多线程理解

    Thread:在使用多线程处理比较大的数据量的扫描,遇到读写文件可能死锁的问题. Perl 线程的生命周期 1.使用 threads 包的 create() 方法: use threads; sub ...

随机推荐

  1. PostgreSQL自学笔记:6 PostgreSQL函数

    6 PostgreSQL函数 6.2 数学函数 abs(x) 绝对值 pi() 圆周率π select abs(-3),pi(); cookie: MySQL中的pi()默认值3.141593, Po ...

  2. NEO-Karl-Python1

    第一个程序: print("NEO-Karl welcome to the new world")

  3. Linux 安装zookeeper

    分享到:   1.下载zokeeper 1.1 官网下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 1.2 链接:https:/ ...

  4. python selenium ——— 动态id、class定位

    什么样的是动态id呢? 动态id就是第一次点击显示的id与二次点击显示的不一样,一般是元素属性中包含一段数字的这种情况. 类似这种: 1 <input type="button&quo ...

  5. if-else案例–开关灯

    首先,创建一个html页面,添加一个div盒子,用css设置相应的样式,用js获取盒子的元素,通过点击事件,设置body的背景颜色,用if..else来判断当什么状态设置相应的颜色,(swith... ...

  6. vins-mono:雅可比矩阵的推导

    imu残差公式 我们计算雅可比采用加扰动形式 以下是位置增量偏差对旋转qbk的雅可比推导 对应的雅可比矩阵的代码 jacobian_pose_i.block<, >(O_P, O_R) = ...

  7. mongodb 参数优化

    1.大部分IO操作为随机IO,建议采用SSD或PCIE,普通硬盘RAID10 2.IO调度算法.普通磁盘:deadline避免IO请求出现“饥饿”现象,SSD/PCIE:noop简单的先进先出处理请求 ...

  8. 遍历其 interator

    当用户自定义数据结构的时候, 如果做遍历呢, 这个时候就需要遍历器 interator 了, 它允许用户定义遍历自己自定义数据结构的方式 当用户定义了iterator, 就可以使用 for of 来遍 ...

  9. bug和注意事项

    bug: 1.新增角色,在选择权限树的时候,如果不选择根目录下的第一个节点,保存后,权限树会打不开. 2.文档页面有两个大字段,即ueditor编辑器的时候,保存后回显会有问题 不过一个页面有两个大文 ...

  10. java 多线程争抢资源死锁

    多线程争抢资源死锁的原理就是,A线程正在持有锁1却想获取锁2,B线程正在持有锁2却要获取锁1 代码如下: public class Main { static ReentrantLock lock1 ...