- 浏览: 497064 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (185)
- job (15)
- linux/windows/unix/bash/shell (31)
- JAVA/J2EE/spring/hibernate/struts (30)
- VC/C++ (48)
- mysql/postgresql (6)
- php/jsp/asp/pear (1)
- FMS/flex/openlaszlo/red5/openmeetings (34)
- apache/tomcat/ftp/svn (6)
- xen/vm/Hadoop/cloudcompute (6)
- visual studio/eclipse/zendstudi/ant (8)
- others (1)
- windows异常处理 __try __except (1)
- (1)
- matlab (4)
- android (0)
最新评论
-
hongzhounlfd:
很透彻,很详细
依赖注入和控制反转 -
jefferyqjy:
谢谢~言简意赅~很明了!
依赖注入和控制反转 -
elderbrother:
太好了,谢谢
依赖注入和控制反转 -
east_zyd_zhao:
终于搞明白了
依赖注入和控制反转 -
Dremeng:
完美,一看就懂理解透彻
依赖注入和控制反转
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.
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.
发表评论
-
C++STL轻松导学(2)
2011-09-27 17:02 13202.2.2 第二版:工业时代- ... -
C++ STL轻松导学
2011-09-27 16:59 1176作为C++标准不可缺少的 ... -
Chapter 6 Exceptions(JAVA EXCEPTION IN NATIVE CODE)
2011-09-26 09:53 1495Contents | Prev | Next | Index ... -
JNI编程中如何传递参数和返回值。
2011-09-14 17:51 1792首先要强调的是,native方法不但可以传递Java的基本类型 ... -
Windows Mobile与Android应用开发对比
2011-09-06 11:44 1290Windows Mobile在经历过最初的Wince系列,po ... -
android和JNI经典blog.doc
2011-09-01 15:29 1749Android JNI调用 2011-02-24 1 ... -
定义VC 消息映射函数小结
2011-08-21 22:15 1317定义VC 消息映射函数小 ... -
多线程中的事件对象
2011-08-21 14:23 1442Using Event Objects 使用事件对象 Appl ... -
VC++多线程调用webservice实例
2011-08-21 12:04 1587一、开始多线程 1.开始 ... -
如何结束线程VC++
2011-08-21 09:20 2795Terminating a Thread Terminati ... -
VS2005使用多字节字符集问题
2011-08-03 13:27 20831>------ 已启动生成: 项目: psgdatat ... -
matlab的作图函数(二维) 星号,点号 颜色
2011-07-27 14:57 10027zz matlab的作图函数(二维 ... -
android 调用C++的so
2011-07-08 18:36 4391第一步:开发环境的安 ... -
windows异常处理__try__except
2011-07-07 14:24 1972try-except用法 try except是win ... -
Java中的一个byte
2011-06-30 14:34 1012Java中的一个byte,其范围是-128~127的,而Int ... -
NDK中char*如何转换成jstring
2011-06-30 13:05 1874JNIEXPORT jstring JNICALLJava_T ... -
CFileDialog多选文件时的最大数量
2011-06-25 20:29 2280system("explorer d:\我的 ... -
C++信号处理编程风格规范
2011-06-24 10:07 21631.背景: C++做数字信号处理很普遍,如何 ... -
C++如何获取系统时间
2011-06-22 11:31 655//方案— 优点:仅使用C标准库;缺点:只能精确到秒级 #in ... -
C++编码中减少内存缺陷的方法和工具
2011-06-14 10:22 1194C++编码中减少内存缺陷的方法和工具 编程技术 ...
相关推荐
多线程同步机制在软件开发中扮演着至关重要的角色,特别是在多处理器系统或者并发执行的任务中,确保线程间的正确协作和数据一致性是必不可少的。VC++中提供了多种同步机制来处理多线程间的同步问题,其中Event是...
我们将深入探讨临界区、互斥量、事件和信号量这四种多线程同步机制。 1. **临界区(Critical Section)**:临界区是多线程编程中的一种同步机制,用于保护共享资源。在任何时刻,只有一个线程可以进入临界区,其他...
在提供的文件列表中,如`RWLock.cpp`,可能涉及到了读写锁(Read-Write Lock),这是一种更为复杂的线程同步机制,允许多个线程同时进行读操作,但只允许一个线程进行写操作,从而提高了并发性能。 `Thread.cpp`和`...
### 多线程技术在VC++串口...综上所述,多线程技术在VC++串口通信程序中的应用,不仅提升了系统的实时处理能力,还通过同步机制和高效的I/O方式优化了资源利用,是现代实时监控与通信系统开发不可或缺的重要组成部分。
4. **线程同步**:使用互斥锁(mutex)、条件变量(condition variable)或信号量(semaphore)等同步机制,确保线程安全地写入文件。 5. **进度跟踪**:更新用户界面(UI)以显示当前的下载进度,这可能涉及到UI...
1. **临界区(Critical Section)**:临界区是一种简单的线程同步机制,用于保护一小段代码,使得在同一时间只有一个线程可以执行这段代码。例如,在公交车上,当司机启动车辆时(临界区),售票员不应同时开启车门...
本教程将深入探讨四种常见的线程同步机制:事件对象、信号量、互斥量以及临界区,帮助开发者理解和掌握如何在VC++中安全地实现多线程通信。 一、事件对象 事件对象是Windows API中用于线程间通信的一种同步机制。它...
多线程同步是保证多个线程安全交互的关键技术,避免了数据竞争和死锁等问题。本实例主要探讨了四种主要的同步机制:信号量、互斥锁、事件以及临界资源。 首先,信号量(Semaphore)是一种计数型同步对象,用于控制...
总之,这个主题涵盖了如何在VC++环境中使用多线程技术优化串口通信程序的设计和实现,包括数据处理、线程同步、错误处理等多个关键点。通过提供的源码和工具,学习者可以深入理解并实践这些概念,提升自己的编程技能...
1. **线程同步**:使用临界区、互斥量、事件对象等机制防止数据竞争。 2. **线程安全的数据结构**:确保在并发访问下数据的正确性。 3. **线程通信**:通过消息队列、共享内存或管道等方式交换信息。 4. **异常处理*...
VC++提供了多种同步机制,如Critical Section(临界区)、Mutex、Semaphore和Event。例如,Critical Section用于保护对共享资源的访问,确保同一时间只有一个线程能访问。 4. **线程通信**: 线程间通信可以通过...
总之,VC++ 2010中的Event机制是解决多线程同步问题的有效工具,理解和熟练掌握其用法对于编写高效、安全的多线程程序至关重要。通过深入研究提供的示例代码,我们可以更直观地理解Event在实际编程中的应用,提升...
下面将详细讨论VC++中创建多线程、线程池、线程调度以及线程同步的相关知识点。 首先,**创建多线程** 是指在一个进程中同时执行多个独立的代码段,每个代码段称为一个线程。在VC++中,可以通过`_beginthreadex`或`...
总结,VC++实现多线程涉及到线程创建、线程函数定义、线程同步和通信等多个方面。通过合理利用这些技术,可以实现如题目描述的子线程功能,提升程序的并发性和用户体验。在实际开发中,需要注意线程管理和性能优化,...
本资料附带的源码提供了实际的多线程编程示例,包括线程同步和通信的实践,对于学习和理解VC++多线程编程具有很高的参考价值。通过分析和运行这些代码,读者可以更好地掌握线程编程的技巧和最佳实践。
2. **线程同步**:为了防止不同线程间的数据冲突,我们需要使用线程同步机制,如互斥量(mutex)、信号量(semaphore)或临界区(critical section)。大漠插件的API可能也需要在特定情况下进行同步,以确保线程安全...
在VC++环境中,多线程编程是一项核心技能,尤其对于开发高效、响应迅速的应用程序至关重要。这个"VC++多线程编程实例集"是为初学者准备的宝贵资源,它包含了一系列已经编译并成功运行的示例,帮助学习者理解和掌握多...
3. **同步机制**:由于多个线程可能同时修改相同的数据(如找到的文件列表),因此需要使用同步机制来避免竞态条件。VC++提供了多种同步工具,如`Mutex`、`Semaphore`和`Critical Section`,可以用来控制对共享资源...
VC++提供了多种同步机制: - `Mutex`:互斥量,确保同一时间只有一个线程能访问资源。 - `CriticalSection`:临界区,类似于互斥量,但仅适用于单进程。 - `Semaphore`:信号量,控制对有限资源的访问数量。 - `...