编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推

来源:互联网 发布:互联网根域名 编辑:程序博客网 时间:2024/04/25 13:59
</pre>第一次发,格式弄了好久。。。。<pre name="code" class="cpp">HANDLE  handle_A,handle_B,handle_C;const int times = 10;unsigned int WINAPI funA(LPVOID pm);unsigned int WINAPI funB(LPVOID pm);unsigned int WINAPI funC(LPVOID pm);int main(){handle_A = CreateSemaphore(NULL,1,1,NULL); //关键点,A的信号量为1,其他的信号量为零,这样就能保证先输出Ahandle_B = CreateSemaphore(NULL,0,1,NULL);handle_C = CreateSemaphore(NULL,0,1,NULL);HANDLE thread_handle[3];thread_handle[0] = (HANDLE)_beginthreadex(NULL,0,funA,NULL,0,NULL);thread_handle[1] = (HANDLE)_beginthreadex(NULL,0,funB,NULL,0,NULL);thread_handle[2] = (HANDLE)_beginthreadex(NULL,0,funC,NULL,0,NULL);WaitForMultipleObjects(3,thread_handle,TRUE,INFINITE);for(int i=0;i<3;i++)CloseHandle(thread_handle[i]);CloseHandle(handle_A);CloseHandle(handle_B);CloseHandle(handle_C);system("pause");return 0;}unsigned int WINAPI funA(LPVOID pm){for(int i=1;i<=times;i++){WaitForSingleObject(handle_A,INFINITE);printf("A");ReleaseSemaphore(handle_B,1,NULL); //释放B的信号量}return 0;}unsigned int WINAPI funB(LPVOID pm){for(int i=1;i<=times;i++){WaitForSingleObject(handle_B,INFINITE);printf("B");ReleaseSemaphore(handle_C,1,NULL); //释放C的信号量}return 0;}unsigned int WINAPI funC(LPVOID pm){for(int i=1;i<=times;i++){WaitForSingleObject(handle_C,INFINITE);printf("C");ReleaseSemaphore(handle_A,1,NULL); //释放A的信号量}return 0;}

0 0