//#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. CommonJs规范详解---【XUEBIG】

     CommonJS是服务器模块的规范,Node.js采用了这个规范   1.CommonJs规范的出发点:JS没有模块系统.标准库较少.缺乏包管理工具:为了让JS可以在任何地方运行,以达到Java.C ...

  2. (三)ajax请求不同源之websocket跨域

    WebSocket是一种通信协议,使用ws://(非加密)和wss://(加密)作为协议前缀.该协议不实行同源政策,只要服务器支持,就可以通过它进行跨源通信. 一.WebSocket目标 在一个单独的 ...

  3. Windows应用程序组成及编程步骤

    Windows应用程序组成及编程步骤: 1.应用程序的组成:一个完整的Windows应用程序通常由五种类型的文件组成 1.C语言源程序文件 2.头文件 3.模块定义文件 4.资源描述文件 5.项目文件 ...

  4. BigDecimal 准确的 double , float 计算

    public class ArithUtil { private static final int DEF_DIV_SCALE = 10; private ArithUtil() { } /** * ...

  5. 为什么很多应用都安装在/usr/local目录下?

    首先,Linux的官方文档FHS对该目录的说明:http://www.linuxbase.org/betaspecs/fhs/fhs/ch04s09.html The /usr/local hiera ...

  6. python统计字词练习

    方法一: import operator from nltk.corpus import stopwords stop_words = stopwords.words('English')#目的是去除 ...

  7. 最大子矩阵和问题dp

    给定一个矩阵 matrix,其中矩阵中的元素可以包含正数.负数.和0,返回子矩阵的最大累加和.例如,矩阵 matrix 为: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 - ...

  8. 小甲鱼Python第十七讲课后习题

    笔记: 1.分清楚形参和实参 2.函数文档:是函数的一部分,于解释不同,使用help(函数名)或者 函数名__doc__可以查看到 3.关键字参数(在一个函数的参数较多的时候作用比较明显): 给参数的 ...

  9. Java_图片切片

    package com.creditease.fetch.credit.util.similarity; import java.awt.image.BufferedImage; import jav ...

  10. vue学习:安装及创建项目

    1.先安装npm 参考链接:https://www.cnblogs.com/Hao-Killer/p/7235398.html 查看npm版本:在终端输入:npm -v 2.在安装vue # 安装vu ...