//#include <stdio.h>
//#include <stdlib.h>
//#include <unistd.h>
#include <windows.h>
//#include <pthread.h>
#include <mutex>
#include <thread>
#include <string.h> using namespace std;
char* buf[5]; //字符指针数组 全局变量
int pos; //用于指定上面数组的下标 //1.定义互斥量
//pthread_mutex_t mutex; // linux
mutex mtx; // C++11
HANDLE g_hMutex = INVALID_HANDLE_VALUE; // Win
void *task(void *p)
{
//3.使用互斥量进行加锁
//pthread_mutex_lock(&mutex); // linux
//mtx.lock(); // C++11
WaitForSingleObject(g_hMutex, INFINITE);//等待互斥量 Win buf[pos] = (char *)p; printf("task %d\r\n", pos);
//sleep(1); // linux
Sleep(500); // Win pos++; //4.使用互斥量进行解锁
//pthread_mutex_unlock(&mutex); // linux
//mtx.unlock(); // C++11
ReleaseMutex(g_hMutex);//释放互斥量 // Win return 0;
} int main(void)
{
//2.初始化互斥量, 默认属性
//pthread_mutex_init(&mutex, NULL); // linux
g_hMutex = CreateMutex(nullptr, false, nullptr); // Win //1.启动一个线程 向数组中存储内容
//pthread_t tid, tid2; // linux
//pthread_create(&tid, NULL, task, (void *)"woainia!"); // linux
//pthread_create(&tid2, NULL, task, (void *)"how"); // linux // CreateThread(nullptr,0...) // Win
thread th1(task, (void *)"woainia!"); // C++
thread th2(task, (void *)"how"); // C++ //2.主线程进程等待,并且打印最终的结果
//pthread_join(tid, NULL); // linux
//pthread_join(tid2, NULL); // linux th2.join(); // C++
th1.join(); // C++ //5.销毁互斥量
//pthread_mutex_destroy(&mutex); // linux
CloseHandle(g_hMutex); // Win Sleep(5000);
int i = 0;
printf("字符指针数组中的内容是:pos:%d \r\n", pos);
for (i = 0; i < pos; ++i)
{
printf("%d : %s \n", i, buf[i]);
}
printf("\n"); system("pause");
return 0;
}

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. Konva入门教程

    啥是 Konva Konva 是一个 canvas 库,可以让我们像操作 DOM 一样来操作 canvas,并提供了对 canvas 中元素的事件机制,拖放操作的支持.所以,用它来做一个拼图游戏什么的 ...

  2. WebSocket的Tomcat实现

    一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...

  3. 原生js实现双向数据绑定

    一.两个model之间的双向绑定 var o = { a: 0 } o.b = o.a + 1; console.log(o.a); // "0" console.log(o.b) ...

  4. 使php支持pdo_mysql

    1.下载pdo_mysql包 wget https://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 2.追加编译php,使其module目录下生产pdo_mysql.so ...

  5. JS编码方式

    1. escape(): 采用unicode字符集对指定的字符串除0-255以外进行编码.所有的空格符.标点符号.特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符 ...

  6. 9. http协议_响应状态码_页面渲染流程_路由_中间件

    1. http协议 超文本传输协议 协议详细规定了 浏览器 和 万维网服务器 之间互相通信的规则 客户端与服务端通信时传输的内容我们称之为报文(请求报文.响应报文) 常见的发送 get 请求方式 在浏 ...

  7. [LeetCode] Construct Quad Tree 建立四叉树

    We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or ...

  8. Python基础 之for循环嵌套实例

    一.在控制台中输出以下字符样式: """ *****                       *****                       *****&qu ...

  9. C语言企业级的需要学习的知识

    建立正确程序运行内存的布局图(印象图) 内存四区模型图: 函数调用模型图: 数据类型的本质:固定大小内存块的别名 对于数组变量b[10]; b+1,与&b+1结果不一样: b代表的是数组首元素 ...

  10. Python 学习笔记7 条件语句 If

    Python中条件语句if 是通过一条或者多条的执行语句的结果,来判断是否执行其包含的代码块. 通常会配合else.elif一起使用,达到根据条件进行多个代码块的执行操作. 简单的if score = ...