40 windows_40_Thread_Mutex 线程 - 互斥

windows_40_Thread_Mutex 线程 - 互斥

  1. // windows_39_Thread_Mutex.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "windows.h"
  5. //互斥排队等候问题,谁先等候谁先执行
  6. HANDLE g_hMutex = NULL;
  7. DWORD WINAPI ThreadProc1( LPVOID pParam )
  8. {
  9. while (1)
  10. {
  11. //等候互斥量
  12. WaitForSingleObject( g_hMutex ,INFINITE);
  13. printf( "ThreadProc1--------\n" );
  14. Sleep( 500 );
  15. //释放互斥量
  16. ReleaseMutex( g_hMutex );
  17. }
  18. return 0;
  19. }
  20. DWORD WINAPI ThreadProc2( LPVOID pParam )
  21. {
  22. while (1)
  23. {
  24. //等候互斥量
  25. WaitForSingleObject( g_hMutex,INFINITE );
  26. printf( "-------------ThreadProc2\n" );
  27. Sleep( 500 );
  28. //释放互斥量
  29. ReleaseMutex( g_hMutex );
  30. }
  31. return 0;
  32. }
  33. DWORD WINAPI ThreadProc3( LPVOID pParam )
  34. {
  35. while (1)
  36. {
  37. //等候互斥量
  38. WaitForSingleObject( g_hMutex,INFINITE );
  39. printf( "-------ThreadProc3-----------\n" );
  40. Sleep( 500 );
  41. //释放互斥量
  42. ReleaseMutex( g_hMutex );
  43. }
  44. return 0;
  45. }
  46. void Create( )
  47. {
  48. DWORD nThreadID = 0;
  49. HANDLE hThread[3] = { NULL };
  50. hThread[0] = CreateThread( NULL, 0, ThreadProc1, NULL, 0, &nThreadID );
  51. hThread[1] = CreateThread( NULL, 0, ThreadProc2 , NULL, 0, &nThreadID );
  52. hThread[2] = CreateThread( NULL, 0, ThreadProc3 , NULL, 0, &nThreadID );
  53. }
  54. int _tmain(int argc, _TCHAR* argv[])
  55. {
  56. //创建互斥
  57. g_hMutex = CreateMutex( NULL, FALSE, NULL );
  58. Create( );
  59. getchar( );
  60. //关闭互斥
  61. CloseHandle( g_hMutex );
  62. return 0;
  63. }

来自为知笔记(Wiz)

时间: 2024-10-06 13:21:07

40 windows_40_Thread_Mutex 线程 - 互斥的相关文章

线程互斥与同步

能解决下面的问题,基本上就能理解线程互斥与同步了. 子线程循环10次,主线程循环100次,接着子线程循环10,主线程循环100次.如此往复循环50次. 1 package cn.lah.thread; 2 3 public class TraditionalThreadCommunication { 4 5 public static void main(String[] args) { 6 7 final Business business = new Business(); 8 new Th

Java多线程与并发应用-(2)-线程互斥synchronized

首先请看下面的例子: package com.lipeng; public class SynchronizedDemo { public static void main(String[] args) { final Print print=new Print(); for(int i=0;i<1000;i++) { new Thread(){ @Override public void run() { print.printName("huangfeihong"); } }.

3.传统线程互斥技术

线程安全问题可以用银行转账来解释 1 /** 2 * 传统的线程互斥技术 3 * @author LiTaiQing 4 */ 5 public class TraditionalThreadSynchronized { 6 7 public static void main(String[] args){ 8 new TraditionalThreadSynchronized().init(); 9 } 10 11 private void init(){ 12 /** 13 * 内部类访问局

线程间通信和线程互斥

线程间通信 1> 线程间通信分为两种 主线程进入子线程(前面的方法都可以) 子线程回到主线程 2> 返回主线程 3> 代码 这个案例的思路是:当我触摸屏幕时,会在子线程加载图片,然后在主线程刷新UI界面 视图布局我就不写了,大家自己来吧,线程间通信代码如下: #pragma mark - 添加响应方法触发创建子线程并加载数据 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

JAVA 并发编程-传统线程互斥技术(Synchronized)(三)

java线程互斥是为了保证,同一时刻最多只有一个线程执行该段代码.那么它的出现又是为了解决什么问题呢?账户存取款,在同一时间段只能让一个人进行操作. 下面来看一个简单实例(多线程带来的问题): public class TraditionalThreadSynchronized { /** * @param args */ public static void main(String[] args) { new TraditionalThreadSynchronized().init(); }

JAVA线程互斥问题

public class TraditionalThreadSynchonized { public static void main(String[] args) { final OutPuter output = new TraditionalThreadSynchonized().new OutPuter(); new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.slee

多线程之----线程互斥再续

本篇接上一篇 多线程之----线程互斥 不好意思 在上一篇中本来是要说线程互斥的,结果对比了下quartor和Timer,讲的quartor有点多了.这节我们重点说一下线程互斥. 按照如下的方式来学习线程互斥: 实现线程互斥的两种方法,sychronized wait/notify  lock(read/write).三种方式. 先开始第一种使用sychronized关键字.大家对这个应该不会陌生,因为我们写过很多线程安全或者说是线程互斥的例子,使用sychronized关键字应该是最主要的方式

线程分离与线程互斥

一.线程分离: 概述: 在任何一一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一一个可结合的线程能够被其他线程收回其资源和杀死.在被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反,一一个分离的线程是不能被其他线程回收或杀死的,它的存储器 资源在它终止止时由系统自自动释放. 默认情况下,线程被创建成可结合的.为了避免存储器泄漏,每个可结合线程都应该要么被显示示地回收,即调用用pthread_join;要么通过调用用pthread_detach函数被分

Python之多线程:线程互斥与线程同步

一.锁在多线程中的使用:线程互斥 lock = threading.Lock()#创建一个锁对象 1.with lock: pass 和进程使用的方式相同 2.控制线程结束的时间 通过一个全局变量 # encoding=utf-8 import threading,time,Queue,random exitFlag = False def write(lock,queue): while exitFlag != True: with lock: data = random.randint(1,