`

多线程同步机制(Vc++)

 
阅读更多
Synchronizing Execution of Multiple Threads
To avoid race conditions and deadlocks, it is necessary to synchronize access by multiple threads to shared resources. Synchronization is also necessary to ensure that interdependent code is executed in the proper sequence.
避免死锁,多线程同步机制很主重要。有助于解决资源共享和协助工作的问题。

There are a number of objects whose handles can be used to synchronize multiple threads. These objects include:
有很东西的句柄可以同步多线程

Console input buffers
输入buf的控制台
Events
事件
Mutexes
互斥
Processes
进程
Semaphores
信号
Threads
线程
Timers
定时器
The state of each of these objects is either signaled or not signaled. When you specify a handle to any of these objects in a call to one of the wait functions, the execution of the calling thread is blocked until the state of the specified object becomes signaled.
这些东西的状态是有信号或者无信号的。当你调用等待函数的时候给这些东西一个句柄。线程的回调函数被阻止知道信号的状态改变(即用信号状态来控制进程函数的执行与否)
Some of these objects are useful in blocking a thread until some event occurs. For example, a console input buffer handle is signaled when there is unread input, such as a keystroke or mouse button click. Process and thread handles are signaled when the process or thread terminates. This allows a process, for example, to create a child process and then block its own execution until the new process has terminated.
这些东西很有用在阻止一个线程的执行直到某些事件发生。比如,控制台输入buf句柄被标记当还有待读取的输入,比如按键或者鼠标点击。(保证用户的输入被执行)。进程和线程的句柄被标记当进程或线程终止(terminates)。允许进程,比如创建子进程的时候阻止它自己执行,直到新的进程被创建。
Other objects are useful in protecting shared resources from simultaneous access. For example, multiple threads can each have a handle to a mutex object. Before accessing a shared resource, the threads must call one of the wait functions to wait for the state of the mutex to be signaled. When the mutex becomes signaled, only one waiting thread is released to access the resource. The state of the mutex is immediately reset to not signaled so any other waiting threads remain blocked. When the thread is finished with the resource, it must set the state of the mutex to signaled to allow other threads to access the resource.
在同时访问的时候保护资源共享,其他的东西也是很有用的。比如,多线程的每一个线程可以有一个互斥锁的句柄。在访问共享资源之前,线程必须等待线程锁的状态被标记。当线程锁的被标记,只有一个等待线程被释放去访问这些资源。这个互斥锁的状态立即去掉标记,其他等待的线程被阻止。当这个线程完成了,它必须改变互斥锁为标记状态,以便其他的进程可以访问这些资源。
For the threads of a single process, critical-section objects provide a more efficient means of synchronization than mutexes. A critical section is used like a mutex to enable one thread at a time to use the protected resource. A thread can use the EnterCriticalSection function to request ownership of a critical section. If it is already owned by another thread, the requesting thread is blocked. A thread can use the TryEnterCriticalSection function to request ownership of a critical section, without blocking upon failure to obtain the critical section. After it receives ownership, the thread is free to use the protected resource. The execution of the other threads of the process is not affected unless they attempt to enter the same critical section.
单进程的线程,(临界区)critical-section 对象提供比互斥锁更有效的同步机制。临界区对象提供类似互斥锁来协调某一个时刻只有一个线程去访问共享资源。线程可以用函数EnterCriticalSection 来请求获取临界区的所有权。如果临界区被其他进程所占有,则请求进程被阻止。
The WaitForInputIdle function makes a thread wait until a specified process is initialized and waiting for user input with no input pending. Calling WaitForInputIdle can be useful for synchronizing parent and child processes, because CreateProcess returns without waiting for the child process to complete its initialization.

For more information, see Synchronization.
分享到:
评论

相关推荐

    多线程的同步机制 VC++

    多线程同步机制在软件开发中扮演着至关重要的角色,特别是在多处理器系统或者并发执行的任务中,确保线程间的正确协作和数据一致性是必不可少的。VC++中提供了多种同步机制来处理多线程间的同步问题,其中Event是...

    VC++多线程同步基本示例

    我们将深入探讨临界区、互斥量、事件和信号量这四种多线程同步机制。 1. **临界区(Critical Section)**:临界区是多线程编程中的一种同步机制,用于保护共享资源。在任何时刻,只有一个线程可以进入临界区,其他...

    vc++中的线程锁(线程锁保持线程同步)

    在提供的文件列表中,如`RWLock.cpp`,可能涉及到了读写锁(Read-Write Lock),这是一种更为复杂的线程同步机制,允许多个线程同时进行读操作,但只允许一个线程进行写操作,从而提高了并发性能。 `Thread.cpp`和`...

    多线程技术在VC++串口通信程序中的应用研究

    ### 多线程技术在VC++串口...综上所述,多线程技术在VC++串口通信程序中的应用,不仅提升了系统的实时处理能力,还通过同步机制和高效的I/O方式优化了资源利用,是现代实时监控与通信系统开发不可或缺的重要组成部分。

    一个多线程下载工具vc++开源代码

    4. **线程同步**:使用互斥锁(mutex)、条件变量(condition variable)或信号量(semaphore)等同步机制,确保线程安全地写入文件。 5. **进度跟踪**:更新用户界面(UI)以显示当前的下载进度,这可能涉及到UI...

    VC++线程同步实例

    1. **临界区(Critical Section)**:临界区是一种简单的线程同步机制,用于保护一小段代码,使得在同一时间只有一个线程可以执行这段代码。例如,在公交车上,当司机启动车辆时(临界区),售票员不应同时开启车门...

    vc++ multithread多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区

    本教程将深入探讨四种常见的线程同步机制:事件对象、信号量、互斥量以及临界区,帮助开发者理解和掌握如何在VC++中安全地实现多线程通信。 一、事件对象 事件对象是Windows API中用于线程间通信的一种同步机制。它...

    VC++MFC多线程同步实例

    多线程同步是保证多个线程安全交互的关键技术,避免了数据竞争和死锁等问题。本实例主要探讨了四种主要的同步机制:信号量、互斥锁、事件以及临界资源。 首先,信号量(Semaphore)是一种计数型同步对象,用于控制...

    【转】多线程技术在VC++串口通信程序中的应用研究

    总之,这个主题涵盖了如何在VC++环境中使用多线程技术优化串口通信程序的设计和实现,包括数据处理、线程同步、错误处理等多个关键点。通过提供的源码和工具,学习者可以深入理解并实践这些概念,提升自己的编程技能...

    多线程数据通信 vc++

    1. **线程同步**:使用临界区、互斥量、事件对象等机制防止数据竞争。 2. **线程安全的数据结构**:确保在并发访问下数据的正确性。 3. **线程通信**:通过消息队列、共享内存或管道等方式交换信息。 4. **异常处理*...

    VC++ 2010 通过Event实现多线程同步

    总之,VC++ 2010中的Event机制是解决多线程同步问题的有效工具,理解和熟练掌握其用法对于编写高效、安全的多线程程序至关重要。通过深入研究提供的示例代码,我们可以更直观地理解Event在实际编程中的应用,提升...

    VC++创建多线程以及应用

    下面将详细讨论VC++中创建多线程、线程池、线程调度以及线程同步的相关知识点。 首先,**创建多线程** 是指在一个进程中同时执行多个独立的代码段,每个代码段称为一个线程。在VC++中,可以通过`_beginthreadex`或`...

    VC++多线程的实现

    总结,VC++实现多线程涉及到线程创建、线程函数定义、线程同步和通信等多个方面。通过合理利用这些技术,可以实现如题目描述的子线程功能,提升程序的并发性和用户体验。在实际开发中,需要注意线程管理和性能优化,...

    vc++多线程编程_附源码

    本资料附带的源码提供了实际的多线程编程示例,包括线程同步和通信的实践,对于学习和理解VC++多线程编程具有很高的参考价值。通过分析和运行这些代码,读者可以更好地掌握线程编程的技巧和最佳实践。

    VC++调用大漠插件多线程运行模版

    2. **线程同步**:为了防止不同线程间的数据冲突,我们需要使用线程同步机制,如互斥量(mutex)、信号量(semaphore)或临界区(critical section)。大漠插件的API可能也需要在特定情况下进行同步,以确保线程安全...

    VC++多线程编程实例集

    在VC++环境中,多线程编程是一项核心技能,尤其对于开发高效、响应迅速的应用程序至关重要。这个"VC++多线程编程实例集"是为初学者准备的宝贵资源,它包含了一系列已经编译并成功运行的示例,帮助学习者理解和掌握多...

    多线程的VC++高速文件搜索代码

    3. **同步机制**:由于多个线程可能同时修改相同的数据(如找到的文件列表),因此需要使用同步机制来避免竞态条件。VC++提供了多种同步工具,如`Mutex`、`Semaphore`和`Critical Section`,可以用来控制对共享资源...

    VC++多线程

    VC++提供了多种同步机制: - `Mutex`:互斥量,确保同一时间只有一个线程能访问资源。 - `CriticalSection`:临界区,类似于互斥量,但仅适用于单进程。 - `Semaphore`:信号量,控制对有限资源的访问数量。 - `...

    多线程技术在VC++串口通信程序中的关键代码.rar

    在VC++编程环境中,MFC(Microsoft Foundation Classes)库提供了丰富的功能来支持应用程序开发,包括多线程技术。多线程技术在串口通信程序中起着至关重要的作用,因为它可以实现并行处理,提高程序的响应速度和...

Global site tag (gtag.js) - Google Analytics