David Toy's blogtoydavid.blog.chinaunix.net
cj_gameboy
全部博文(284)
joomla(1)
git(8)
TWave(1)
项目(1)
介绍(6)
错误处理(1)
练习(25)
utf-8(1)
GTK(17)
X-Windows(1)
linux驱动程序(1)
yacc与lex(1)
压缩(1)
信号处理(1)
函数(2)
shuffle压缩算法(1)
旋转门压缩(1)
哈夫曼压缩(4)
小波压缩(2)
压缩(0)
静态库与动态库(4)
调试技术(8)
杂谈(4)
oracle(3)
socket(7)
文件系统相关(1)
多线程(8)
多进程(1)
网络相关(0)
数据库操作(0)
ipc相关(7)
mysql(7)
ftp(2)
算法(1)
基本应用(1)
编程练习(2)
进程列表(1)
direct(1)
MFC(1)
visual studio(1)
DLL技术(1)
win核心技术(2)
UDP(1)
TCPIP(1)
有名管道(1)
邮槽技术(2)
win-IPC(0)
string分解(1)
STL相关(1)
fstream(4)
boost相关(6)
实时数据库(1)
MSserver(2)
oracle技术(20)
2012年(18)
2011年(33)
2010年(83)
2009年(147)
2008年(3)
maoyg082
小雅贝贝
diaoopad
Moonecho
hjshajsh
浪花小雨
cynthia
学无止境
fxtxkktv
麻烦的c
安然之风
12044626
分类: C/C++
2009-11-02 20:17:18
互斥锁同步多线程:
#include <windows.h>#include <stdlib.h>#include <stdio.h>#include <TCHAR.h>DWORD WINAPI ThreadFun(LPVOID);#define THREAD_POOL_SIZE 5HANDLE hMutex;static int count;int main(){ HANDLE hThrds[THREAD_POOL_SIZE]; int slot=0; DWORD threadId[THREAD_POOL_SIZE]; int i; DWORD rc; hMutex = CreateMutex(NULL, false, _T("Demo Mutex")); for(i=0;i<THREAD_POOL_SIZE;i++){ hThrds[i]=CreateThread(NULL, 0, ThreadFun, (LPVOID)i, 0, &threadId[i]); if(hThrds[i]) { printf("Thread %d lanched \n", i); } } rc = WaitForMultipleObjects(THREAD_POOL_SIZE, hThrds, true, INFINITE); slot = rc - WAIT_OBJECT_0; if(slot>=0 && slot<THREAD_POOL_SIZE) printf("All thread terminite\n"); CloseHandle(hMutex); for(i=0;i<THREAD_POOL_SIZE;i++){ CloseHandle(hThrds[i]); } return 0;}DWORD WINAPI ThreadFun(LPVOID n){ for(;;){ WaitForSingleObject(hMutex, INFINITE); if(count==20){ ReleaseMutex(hMutex); return 0; } count++; printf("t%d do %d\n", n, count); ReleaseMutex(hMutex); Sleep(100); } printf("Thread %d terminate\n", n); return 0;}
上一篇:使用WaitForMultipleObjects等待全部线程激发
下一篇:在linux中使用Xmanager的配置
登录 注册