线程同步

转载 2015年07月09日 17:23:30

线程同步

同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。

“同”字从字面上容易理解为一起动作

其实不是,“同”字应是指协同、协助、互相配合。

如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。例如Window API函数SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的LRESULT值返回给调用者。
在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。
在C++ 11里面,通过std::mutex的加锁和解锁来保证。例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<mutex>
#include<thread>
 
usingnamespacestd;
 
mutexm;
 
voidthreadFunc(inti)
{
m.lock();
//在这里写上你需要的代码
m.unlock();
}
 
intmain()
{
threadt1(threadFunc,1);
threadt2(threadFunc,2);
t1.join();
t2.join();
return0;
}
线程同步的方式和机制

临界区、互斥量、事件、信号量四种方式
临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别
1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作
http://baike.baidu.com/view/6501899.htm#2

相关文章推荐

线程同步的实现

  • 2017-08-25 16:27
  • 964B
  • 下载

线程同步编程实例

  • 2012-04-13 10:32
  • 1.14MB
  • 下载

Java线程同步实例 生产者 消费者问题分析

Java线程同步实例 生产者 消费者问题分析 实例1 public class mytread { public static void main(String[] args) { ...

线程同步 vc

  • 2012-03-08 00:04
  • 3.61MB
  • 下载

基于Linux 线程同步

线程同步/线程死锁

1.线程同步,一个关键字:synchronized 为什么有这个东西呢,假如有一个对象,里面有成员变量和方法,如果有很多线程都想访问它们,有可能造成用户想避免的结果。 我也举那个经典的例子...

Android 线程同步Demo

  • 2017-04-17 15:25
  • 21.48MB
  • 下载

进程/线程同步、互斥、通信的问题:

最近也是遇到很多进程、线程同步、互斥,进程间通信的问题,这些问题放在一起很容易引起混淆,最近也查阅了相关的书籍资料和一些博客,在此写出自己的一些相关总结,希望对大家有帮助。首先要说的是进程、线程两种最...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)