本文共 5292 字,大约阅读时间需要 17 分钟。
这是个有趣的问题,直接上代码:
#include#include HANDLE g_h1 = NULL;HANDLE g_h2 = NULL;int g_m = 0;int g_n = 0;void init(){ g_h1 = CreateSemaphore(NULL, 1, 1, NULL); g_h2 = CreateSemaphore(NULL, 0, 100, NULL);}void addToQueque(){ WaitForSingleObject(g_h1, INFINITE); cout << "addToQueque--------->" << ++g_m << endl; ReleaseSemaphore(g_h1, 1, NULL); ReleaseSemaphore(g_h2, 1, NULL);}void delFromQueue(){ WaitForSingleObject(g_h1, INFINITE); WaitForSingleObject(g_h2, INFINITE); cout << "delFromQueue : " << ++g_n << endl; ReleaseSemaphore(g_h1, 1, NULL);}DWORD WINAPI ThreadProc1(LPVOID pVoid){ int i = 0; for(i = 0; i < 100; i++) { addToQueque(); } return 0;}DWORD WINAPI ThreadProc2(LPVOID pVoid){ int i = 0; for(i = 0; i < 100; i++) { delFromQueue(); } return 0;}int main(){ init(); HANDLE hThread[2] = {0}; hThread[0] = CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL); hThread[1] = CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL); CloseHandle(hThread[0]); CloseHandle(hThread[1]); Sleep(1000); // 千千万万不要放在return 0;语句的上一行 CloseHandle(g_h1); CloseHandle(g_h2); return 0;}
结果(有可能每次运行的结果都不一样哈):
addToQueque--------->1
addToQueque--------->2 delFromQueue : 1 addToQueque--------->3 delFromQueue : 2 addToQueque--------->4 delFromQueue : 3 addToQueque--------->5 delFromQueue : 4 addToQueque--------->6 delFromQueue : 5 addToQueque--------->7 delFromQueue : 6 addToQueque--------->8 delFromQueue : 7 delFromQueue : 8 addToQueque--------->9 delFromQueue : 9 addToQueque--------->10 delFromQueue : 10 addToQueque--------->11 delFromQueue : 11 addToQueque--------->12 delFromQueue : 12 addToQueque--------->13 delFromQueue : 13 addToQueque--------->14 delFromQueue : 14 addToQueque--------->15 delFromQueue : 15 addToQueque--------->16 delFromQueue : 16 addToQueque--------->17 delFromQueue : 17 addToQueque--------->18 delFromQueue : 18 addToQueque--------->19 delFromQueue : 19 addToQueque--------->20 delFromQueue : 20 addToQueque--------->21 delFromQueue : 21 addToQueque--------->22 delFromQueue : 22 addToQueque--------->23 delFromQueue : 23 addToQueque--------->24 delFromQueue : 24 addToQueque--------->25 delFromQueue : 25 addToQueque--------->26 delFromQueue : 26 addToQueque--------->27 delFromQueue : 27 addToQueque--------->28 delFromQueue : 28 addToQueque--------->29 delFromQueue : 29 addToQueque--------->30 delFromQueue : 30 addToQueque--------->31 delFromQueue : 31 addToQueque--------->32 delFromQueue : 32 addToQueque--------->33 delFromQueue : 33 addToQueque--------->34 delFromQueue : 34 addToQueque--------->35 delFromQueue : 35 addToQueque--------->36 delFromQueue : 36 addToQueque--------->37 delFromQueue : 37 addToQueque--------->38 delFromQueue : 38 addToQueque--------->39 delFromQueue : 39 addToQueque--------->40 delFromQueue : 40 addToQueque--------->41 delFromQueue : 41 addToQueque--------->42 delFromQueue : 42 addToQueque--------->43 delFromQueue : 43 addToQueque--------->44 delFromQueue : 44 addToQueque--------->45 delFromQueue : 45 addToQueque--------->46 delFromQueue : 46 addToQueque--------->47 delFromQueue : 47 addToQueque--------->48 delFromQueue : 48 addToQueque--------->49 delFromQueue : 49 addToQueque--------->50 delFromQueue : 50 addToQueque--------->51 delFromQueue : 51 addToQueque--------->52 delFromQueue : 52 addToQueque--------->53 delFromQueue : 53 addToQueque--------->54 delFromQueue : 54 addToQueque--------->55 delFromQueue : 55 addToQueque--------->56 delFromQueue : 56 addToQueque--------->57 delFromQueue : 57 addToQueque--------->58 delFromQueue : 58 addToQueque--------->59 delFromQueue : 59 addToQueque--------->60 delFromQueue : 60 addToQueque--------->61 delFromQueue : 61 addToQueque--------->62 delFromQueue : 62 addToQueque--------->63 delFromQueue : 63 addToQueque--------->64 delFromQueue : 64 addToQueque--------->65 delFromQueue : 65 addToQueque--------->66 delFromQueue : 66 addToQueque--------->67 delFromQueue : 67 addToQueque--------->68 delFromQueue : 68 addToQueque--------->69 delFromQueue : 69 addToQueque--------->70 delFromQueue : 70 addToQueque--------->71 delFromQueue : 71 addToQueque--------->72 delFromQueue : 72 addToQueque--------->73 delFromQueue : 73 addToQueque--------->74 delFromQueue : 74 addToQueque--------->75 delFromQueue : 75 addToQueque--------->76 delFromQueue : 76 addToQueque--------->77 delFromQueue : 77 addToQueque--------->78 delFromQueue : 78 addToQueque--------->79 delFromQueue : 79 addToQueque--------->80 delFromQueue : 80 addToQueque--------->81 delFromQueue : 81 addToQueque--------->82 delFromQueue : 82 addToQueque--------->83 delFromQueue : 83 addToQueque--------->84 delFromQueue : 84 addToQueque--------->85 delFromQueue : 85 addToQueque--------->86 delFromQueue : 86 addToQueque--------->87 delFromQueue : 87 addToQueque--------->88 delFromQueue : 88 addToQueque--------->89 delFromQueue : 89 addToQueque--------->90 delFromQueue : 90 addToQueque--------->91 delFromQueue : 91 addToQueque--------->92 delFromQueue : 92 addToQueque--------->93 delFromQueue : 93 addToQueque--------->94 delFromQueue : 94 addToQueque--------->95 delFromQueue : 95 addToQueque--------->96 delFromQueue : 96 addToQueque--------->97 delFromQueue : 97 addToQueque--------->98 delFromQueue : 98 addToQueque--------->99 delFromQueue : 99 addToQueque--------->100 delFromQueue : 100转载地址:http://dprvi.baihongyu.com/