线程的同步之互斥量mutex(一)

来源:互联网 发布:手机模拟打碟机软件 编辑:程序博客网 时间:2024/04/30 21:07

1.什么是同步?

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

"同"字从字面上容易理解为一起动作,其实不是,"同"字应是指协同、协助、互相配合。

在多线程编程中我们所说的同步,和平时所说的同步还是有区别(不能理解成同时完成),多线程中同步的真正意义指的是多线程协同配合,一个一个排好队,相互配合来完完成工作

如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。

我们知道了多线程共享资源,所以在程序只能不可避免多个线程协同工作。那么这些线程就会使用某个公共的资源,为了不产生冲突,就需要线程之间的同步,冲突一般会产生在多线程的写操作之间,而对操作则很安全。

但是互斥锁也有缺点,就是同一时刻只有一个线程去访问,程序的并行性(同一时刻多个线程同时执行)不高,要提高其并行性,可以使用读写锁(下节讲)。

2.互斥量mutex

不能同时发生的事情,从而使线程同步,可以将互斥量想象成锁,当只有一个线程获得该锁的时候才有权限对共享资源进行操作,此时其他线程不能对该资源进行操作,在此操作完成以后要对该锁进行解锁。

pthread-mutex_lock();加锁操作函数

仅有一个参数是:pthread_mutex_t类型的互斥量

pthread_mutex_try()试图去加锁,成功就成功了,失败的化返回一个错误码,如果互斥量已经被加锁,则不会阻塞线程。

pthread_mutex_unlock():解锁操作函数

 

pthread_mutex_init()互斥量初始化函数

pthread_mutex_destroy()互斥量销毁函数

3.程序设计

运行结构分析

0 0