多个线程互同步问题

简介:

 

 
  1. #include <windows.h> 
  2. #include <stdio.h> 
  3.  
  4. #define NUMTHREADS 3 
  5. #define BUFFER_SIZE 16 
  6. #define FOR_TIMES 5 
  7.  
  8. HANDLE hWriteEvents[NUMTHREADS]; 
  9. HANDLE hReadEvents[NUMTHREADS]; 
  10. BYTE lpSharedBuffer[16]={0}; 
  11.  
  12. void MultiEvents(void); 
  13. VOID WriteToBuffer(VOID); 
  14.  
  15. DWORD WINAPI ThreadFunction(LPVOID lpParam); 
  16.  
  17. int main(){ 
  18.     MultiEvents(); 
  19.  
  20. void MultiEvents(void){ 
  21.     HANDLE hThread; 
  22.     DWORD i; 
  23.     for(i=0;i<NUMTHREADS;i++){ 
  24.         hWriteEvents[i] = CreateEvent(NULL,FALSE,FALSE,NULL); 
  25.         if(hWriteEvents[i]==NULL){ 
  26.             printf("CreateEvent failed.(%d)\n",GetLastError()); 
  27.             return
  28.         } 
  29.         hReadEvents[i] = CreateEvent(NULL,FALSE,FALSE,NULL); 
  30.         if(hReadEvents[i]==NULL){ 
  31.             printf("CreateEvent failed.(%d)\n",GetLastError()); 
  32.             return
  33.         } 
  34.         hThread = CreateThread(NULL,0,ThreadFunction,i,0,NULL); 
  35.         if(hThread == NULL){ 
  36.             printf("CreateThread failed.(%d)\n",GetLastError()); 
  37.             return
  38.         } 
  39.     } 
  40.     WriteToBuffer(); 
  41.  
  42. VOID WriteToBuffer(VOID){ 
  43.     DWORD dwWaitResult,i,j; 
  44.     for(j=0;j<FOR_TIMES;j++){ 
  45.         Sleep(rand()%100); 
  46.         wsprintf(lpSharedBuffer,"shared %d",j); 
  47.         for(i=0;i<NUMTHREADS;i++){ 
  48.             if(!SetEvent(hWriteEvents[i])){ 
  49.                 printf("SetEvent failed.(%d)\n",GetLastError()); 
  50.                 return
  51.             } 
  52.         } 
  53.         dwWaitResult = WaitForMultipleObjects(NUMTHREADS,hReadEvents,TRUE,INFINITE); 
  54.         if(dwWaitResult != WAIT_OBJECT_0){ 
  55.             printf("Wait error.(%d)\n",GetLastError()); 
  56.             ExitProcess(0); 
  57.         } 
  58.     } 
  59.  
  60. DWORD WINAPI ThreadFunction(LPVOID lpParam){ 
  61.     DWORD dwWaitResult; 
  62.     BYTE lpRead[16]; 
  63.     DWORD j = 0; 
  64.     DWORD dwThreadIndex = (DWORD)lpParam; 
  65.     for(j=0;j<FOR_TIMES;j++){ 
  66.         dwWaitResult = WaitForSingleObject(hWriteEvents[dwThreadIndex],INFINITE); 
  67.         switch (dwWaitResult){ 
  68.         case WAIT_OBJECT_0: 
  69.             Sleep(rand()%10); 
  70.             CopyMemory(lpRead,lpSharedBuffer,16); 
  71.             break
  72.         default
  73.             printf("Wait error:%d\n",GetLastError()); 
  74.             return 0; 
  75.         } 
  76.         printf("线程%u\t第%d次读,内容:%s\n",dwThreadIndex,j,(LPSTR)lpRead); 
  77.     } 
  78.     return 1; 

 












本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/671381,如需转载请自行联系原作者

相关文章
|
5月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
208 0
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
824 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
Java 开发者 C++
Java多线程同步大揭秘:synchronized与Lock的终极对决!
Java多线程同步大揭秘:synchronized与Lock的终极对决!
258 5
Java 线程同步的四种方式,最全详解,建议收藏!
本文详细解析了Java线程同步的四种方式:synchronized关键字、ReentrantLock、原子变量和ThreadLocal,通过实例代码和对比分析,帮助你深入理解线程同步机制。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Java 线程同步的四种方式,最全详解,建议收藏!
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
280 1
|
安全 Java 开发者
Java多线程同步:synchronized与Lock的“爱恨情仇”!
Java多线程同步:synchronized与Lock的“爱恨情仇”!
162 5
|
Java 程序员
从0到1,手把手教你玩转Java多线程同步!
从0到1,手把手教你玩转Java多线程同步!
137 3
|
安全 调度 C#
STA模型、同步上下文和多线程、异步调度
【10月更文挑战第19天】本文介绍了 STA 模型、同步上下文和多线程、异步调度的概念及其优缺点。STA 模型适用于单线程环境,确保资源访问的顺序性;同步上下文和多线程提高了程序的并发性和响应性,但增加了复杂性;异步调度提升了程序的响应性和资源利用率,但也带来了编程复杂性和错误处理的挑战。选择合适的模型需根据具体应用场景和需求进行权衡。
359 0
|
Java 测试技术
Java多线程同步实战:从synchronized到Lock的进化之路!
Java多线程同步实战:从synchronized到Lock的进化之路!
200 1

热门文章

最新文章