Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36921
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-26 18:39
个人简介

奇怪的人

文章分类
文章存档

2016年(19)

我的朋友

分类: LINUX

2016-10-26 18:51:03

原文地址:Linux线程同步互斥 作者:jluliuchao

编译 g++ -o thread_mutex mutex.cpp -lpthread
运行 ./thread_mutex
如果不加互斥量 则 输出AAAAAAAA和BBBBBBBBBB的顺序是混乱的 
如果加上互斥量 则先输出10个AAAA然后是10个BBBBBBBB

#include <iostream>
#include <pthread.h>
using namespace std;

pthread_mutex_t MyMutex;
void* ThreadFuncA(void *p)
{
pthread_mutex_lock(&MyMutex); //锁定互斥量

for(int j=0; j<10; ++j)
{
cout<<"AAAAAAAAAA"<<endl;
sleep(1); //为了看互斥与不互斥的区别

}
pthread_mutex_unlock(&MyMutex); //释放互斥量

return NULL;
}

void* ThreadFuncB(void *p)
{
pthread_mutex_lock(&MyMutex);
for(int j=0; j<10; ++j)
{
cout<<"BBBBBBBBBBB"<<endl;
sleep(3); //为了看互斥与不互斥的区别

}
pthread_mutex_unlock(&MyMutex);
return NULL;
}

int main()
{
pthread_t MythreadID1; //线程ID

pthread_t MythreadID2; //线程ID

int ThreadRet1; //线程返回值

int ThreadRet2; //线程返回值


//初始化互斥量

pthread_mutex_init(&MyMutex, NULL);
//可用返回值来判断线程是否成功 这里没有判断

ThreadRet1 = pthread_create(&MythreadID1, NULL, &ThreadFuncA, NULL);
ThreadRet2 = pthread_create(&MythreadID2, NULL, &ThreadFuncB, NULL);
pthread_join(MythreadID1, NULL); //等待线程结束

pthread_join(MythreadID2, NULL); //等待线程结束

pthread_mutex_destroy(&MyMutex); //销毁互斥量

}



阅读(1044) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~