几个简单程序加深你对多线程和信号量的理解
2013-10-06 22:58
441 查看
#include <windows.h> #include <iostream.h> HANDLE g_hSemp1 = NULL; HANDLE g_hSemp2 = NULL; DWORD WINAPI ThreadProc(LPVOID pVoid); int main() { cout << "main thread" << endl; g_hSemp1 = CreateSemaphore(NULL, 1, 10, NULL); g_hSemp2 = CreateSemaphore(NULL, 1, 10, NULL); HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); CloseHandle(hThread); CloseHandle(g_hSemp1); CloseHandle(g_hSemp2); return 0; } DWORD WINAPI ThreadProc(LPVOID pVoid) { WaitForSingleObject(g_hSemp1, INFINITE); cout << "thread" << endl; ReleaseSemaphore(g_hSemp1, 1, NULL); return 0; }
结果:
main thread
#include <windows.h> #include <iostream.h> HANDLE g_hSemp1 = NULL; HANDLE g_hSemp2 = NULL; DWORD WINAPI ThreadProc(LPVOID pVoid); int main() { cout << "main thread" << endl; g_hSemp1 = CreateSemaphore(NULL, 1, 10, NULL); g_hSemp2 = CreateSemaphore(NULL, 1, 10, NULL); HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); Sleep(1000); CloseHandle(hThread); CloseHandle(g_hSemp1); CloseHandle(g_hSemp2); return 0; } DWORD WINAPI ThreadProc(LPVOID pVoid) { WaitForSingleObject(g_hSemp1, INFINITE); cout << "thread" << endl; ReleaseSemaphore(g_hSemp1, 1, NULL); return 0; }
结果:
main thread
thread
#include <windows.h> #include <iostream.h> HANDLE g_hSemp1 = NULL; HANDLE g_hSemp2 = NULL; DWORD WINAPI ThreadProc(LPVOID pVoid); int main() { cout << "main thread" << endl; g_hSemp1 = CreateSemaphore(NULL, 0, 10, NULL); g_hSemp2 = CreateSemaphore(NULL, 1, 10, NULL); HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); Sleep(1000); CloseHandle(hThread); CloseHandle(g_hSemp1); CloseHandle(g_hSemp2); return 0; } DWORD WINAPI ThreadProc(LPVOID pVoid) { WaitForSingleObject(g_hSemp1, INFINITE); cout << "thread" << endl; ReleaseSemaphore(g_hSemp1, 1, NULL); return 0; }
结果:
main thread
#include <windows.h> #include <iostream.h> HANDLE g_hSemp1 = NULL; HANDLE g_hSemp2 = NULL; DWORD WINAPI ThreadProc(LPVOID pVoid); int main() { cout << "main thread" << endl; g_hSemp1 = CreateSemaphore(NULL, 1, 10, NULL); g_hSemp2 = CreateSemaphore(NULL, 1, 10, NULL); HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); Sleep(1000); CloseHandle(hThread); CloseHandle(g_hSemp1); CloseHandle(g_hSemp2); return 0; } DWORD WINAPI ThreadProc(LPVOID pVoid) { WaitForSingleObject(g_hSemp1, INFINITE); WaitForSingleObject(g_hSemp2, INFINITE); cout << "thread" << endl; ReleaseSemaphore(g_hSemp1, 1, NULL); ReleaseSemaphore(g_hSemp2, 1, NULL); return 0; }
结果:
main thread
thread
#include <windows.h> #include <iostream.h> HANDLE g_hSemp1 = NULL; HANDLE g_hSemp2 = NULL; DWORD WINAPI ThreadProc(LPVOID pVoid); int main() { cout << "main thread" << endl; g_hSemp1 = CreateSemaphore(NULL, 1, 10, NULL); g_hSemp2 = CreateSemaphore(NULL, 0, 10, NULL); HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); Sleep(1000); CloseHandle(hThread); CloseHandle(g_hSemp1); CloseHandle(g_hSemp2); return 0; } DWORD WINAPI ThreadProc(LPVOID pVoid) { WaitForSingleObject(g_hSemp1, INFINITE); WaitForSingleObject(g_hSemp2, INFINITE); cout << "thread" << endl; ReleaseSemaphore(g_hSemp1, 1, NULL); ReleaseSemaphore(g_hSemp2, 1, NULL); return 0; }
结果:
main thread
#include <windows.h> #include <iostream.h> HANDLE g_hSemp1 = NULL; HANDLE g_hSemp2 = NULL; DWORD WINAPI ThreadProc(LPVOID pVoid); int main() { cout << "main thread" << endl; g_hSemp1 = CreateSemaphore(NULL, 1, 10, NULL); g_hSemp2 = CreateSemaphore(NULL, 1, 10, NULL); HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); Sleep(1000); CloseHandle(hThread); CloseHandle(g_hSemp1); CloseHandle(g_hSemp2); return 0; } DWORD WINAPI ThreadProc(LPVOID pVoid) { WaitForSingleObject(g_hSemp1, INFINITE); WaitForSingleObject(g_hSemp1, INFINITE); cout << "thread" << endl; ReleaseSemaphore(g_hSemp1, 1, NULL); ReleaseSemaphore(g_hSemp2, 1, NULL); return 0; }
结果:
main thread
#include <windows.h> #include <iostream.h> HANDLE g_hSemp1 = NULL; HANDLE g_hSemp2 = NULL; DWORD WINAPI ThreadProc(LPVOID pVoid); int main() { cout << "main thread" << endl; g_hSemp1 = CreateSemaphore(NULL, 1, 10, NULL); g_hSemp2 = CreateSemaphore(NULL, 0, 10, NULL); HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); Sleep(1000); CloseHandle(hThread); CloseHandle(g_hSemp1); CloseHandle(g_hSemp2); return 0; } DWORD WINAPI ThreadProc(LPVOID pVoid) { WaitForSingleObject(g_hSemp1, INFINITE); WaitForSingleObject(g_hSemp2, INFINITE); ReleaseSemaphore(g_hSemp2, 1, NULL); cout << "thread" << endl; return 0; }
结果:
main thread
#include <windows.h> #include <iostream.h> HANDLE g_hSemp1 = NULL; HANDLE g_hSemp2 = NULL; DWORD WINAPI ThreadProc(LPVOID pVoid); int main() { cout << "main thread" << endl; g_hSemp1 = CreateSemaphore(NULL, 1, 10, NULL); g_hSemp2 = CreateSemaphore(NULL, 0, 10, NULL); HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); Sleep(1000); CloseHandle(hThread); CloseHandle(g_hSemp1); CloseHandle(g_hSemp2); return 0; } DWORD WINAPI ThreadProc(LPVOID pVoid) { WaitForSingleObject(g_hSemp1, INFINITE); ReleaseSemaphore(g_hSemp2, 1, NULL); WaitForSingleObject(g_hSemp2, INFINITE); cout << "thread" << endl; return 0; }
结果:
main thread
thread
好了,如果你愿意,你可以自己去变换程序,然后运行,并分析结果,相信对你理解多线程和信号量是有帮助的。
相关文章推荐
- 通过简单的售票程序理解多线程
- 通过简单的售票程序理解多线程
- 充分理解Socket---简单的聊天程序的代码
- 多线程,信号量的简单使用 GCD
- 八条设计多线程程序的简单规则
- 简单对比C#程序中的单线程与多线程设计
- 一个简单的多线程、断点下载Java程序
- 菜鸟发问,请各位不吝赐教啊! 关于一个简单的程序的理解问题
- UDP Socket基本思路小程序(2) 多线程简单聊天程序
- 模拟火车票购票系统的简单多线程程序
- 理解JAVA程序逻辑及面向对象编程思想简单总结(17)
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的(原创)
- 几个简单的servlet程序
- 几个用递归实现的简单程序
- 几个程序解惑java多线程
- 简单的Linux环境下多线程TCP服务程序框架
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- MAC COCOA一个简单的多线程程序[2]
- 简单探照灯遮照效果的几个Silverlight程序(Silverlight 2.0)
- 多线程,信号量的简单使用 GCD