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

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)



發佈了270 篇原創文章 · 獲贊 12 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章