Unix/Linux线程同步互斥量的使用

20 篇文章 0 订阅
18 篇文章 0 订阅
Unix/Linux线程同步互斥量的使用
       在main函数中创建3个子线程,并实时输出当前子线程数,当每创建一个子线程的时候,就对线程数变量加一,每个子线程运行3秒,3秒之后对子线程数变量值减一。当线程数为0时主线程退出。在对子线程数的读写过程中都使用到了线程同步的互斥量函数pthread_mutex_lock() 和 pthread_mutex_unlock()。
Demo代码如下:
/**
 * Author: ACb0y
 * FileName: main.cpp
 * CreateTime: 2011-10-12 23:19:34
 * Version: 1.0 
 */
#include <iostream>
#include <pthread.h>
#include "apue.h"
#include "err_msg.h"
using namespace std;

struct ChildThreadInfo
{
	int cnt;
	pthread_mutex_t lock;	
};

ChildThreadInfo childThreadInfo;

void * ThreadRun(void *arg)
{
	int id = *((int *)arg);
	int count = 0;
	pthread_mutex_lock(&childThreadInfo.lock);
	childThreadInfo.cnt++;
	pthread_mutex_unlock(&childThreadInfo.lock);
	while (count != 3) 
	{
		sleep(1);
		count++;
		cout << "Thread " << id << " run " << count << " second" << endl;
	}
	pthread_mutex_lock(&childThreadInfo.lock);
	childThreadInfo.cnt--;
	pthread_mutex_unlock(&childThreadInfo.lock);
}

int main()
{
	pthread_t tid;
	int id = 0;
	while (true)
	{
		
		if (id < 3) 
		{
			++id;
			pthread_create(&tid, NULL, ThreadRun, (void *)&id);
		}
		
		sleep(1);
		pthread_mutex_lock(&childThreadInfo.lock);
		cout << "child thread count = " << childThreadInfo.cnt << endl;
		pthread_mutex_unlock(&childThreadInfo.lock);
		if (childThreadInfo.cnt == 0) 
		{
			break;
		}
	}
	cout << "all child threads stop and exit" << endl;
	return 0;
}

运行结果截图如下:



附上makefile.mk 文件

include ../../../pathenv.mk

MAIN_TARGET=../Out
SRC_PATH1=$(COMMON_PATH)
SRC_PATH2=../src
OBJ_PATH=../obj

FILE_1=main.cpp
SRC_1=$(SRC_PATH2)/$(FILE_1)
OBJ_1=$(OBJ_PATH)/$(FILE_1:.cpp=.o)

CXX=g++
CXXFLAG=-g -D_DEBUG

LIBS= -lpthread

INCLUDE_PATH=-I$(SRC_PATH1) -I$(SRC_PATH2)

COMPILE_CPP=$(CXX) $(CXXFLAG) $(INCLUDE_PATH) -o $@ -c $?
COMPILE_LINK=$(CXX) $(CXXFLAG) $(INCLUDE_PATH) $(LIBS) -o $@

OBJS=$(OBJ_1)

$(MAIN_TARGET)::$(OBJS)	
	$(COMPILE_LINK) $(OBJS)	

$(OBJ_1)::$(SRC_1)
	$(COMPILE_CPP)

PHONY: clean

clean:
	rm $(OBJS)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值