在进行多线程编程时,我们总会遇到全局变量和数据结构的问题,这是多线程之间进行通信的问题。如果多个线程同时读写一个全局变量,那么会造成竞争或者出错。为了解决这一问题,我们需要对全局数据进行,使用互斥量实现锁的机制,当某个线程在某个操作前进行了加锁,那么某个操作只能在这个线程进行,直至将锁去除,相当于在这里将多线程的并行变成了串行。本文重点学习如何使用互斥量进行全局数据的同步,分为三个部分,第一部分给出代码示例,第二部分对代码进行讲解,第三部分给出运行结果。
一、代码示例
该程序使用4个线程实现两个向量的点积运算。
二、代码讲解
定义DOTDATA结构体,里面包含4个成员变量,可表示两个向量,乘积和向量的长度。
定义全局变量和互斥量
为了点积运算的方便,定义和使用一些局部变量
计算点积
给互斥量加锁,更新全局变量结构体中的数据,更新完成解锁,然后退出线程
给两个向量分配内存空间并赋值,然后给全局变量结构体中数据赋值,最后初始化互斥量
初始化所要执行的线程属性对象,并将其设置为可结合的,然后根据属性对象创建4个线程,执行 dotprod程序,并传递线程的ID
删除属性对象,然后结合线程,知道每个线程都结束才执行下一步程序
打印输出点积结果 ,释放两个向量的内存,删除互斥量,退出线程。
三、运行结果
学习pthreads,使用互斥量进行同步,布布扣,bubuko.com
原文地址:http://blog.csdn.net/helei001/article/details/38537005