Unix/Linux线程同步互斥量的使用
发布时间:2022-11-03 12:46:43 所属栏目:Unix 来源:
导读: Unix/Linux线程同步互斥量的使用
在main函数中创建3个子线程,并实时输出当前子线程数,当每创建一个子线程的时候,就对线程数变量加一unix线程切换,每个子线程运行3秒,3秒之后对子线程数变量值减一。
在main函数中创建3个子线程,并实时输出当前子线程数,当每创建一个子线程的时候,就对线程数变量加一unix线程切换,每个子线程运行3秒,3秒之后对子线程数变量值减一。
|
Unix/Linux线程同步互斥量的使用 在main函数中创建3个子线程,并实时输出当前子线程数,当每创建一个子线程的时候,就对线程数变量加一unix线程切换,每个子线程运行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 #include #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) (编辑:我爱资讯网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
