线程间通信————互斥
互斥
临界资源
一次只允许一个任务(进程,线程)访问的共享资源
临界区
访问临界资源的代码
互斥机制
mutex互斥锁
任务访问临界资源前申请锁 访问完后释放锁
互斥锁初始化
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr *attr)
成功返回0 失败返回错误码
mutex指向要初始化的互斥锁对象
attr 互斥锁属性 NULl表示缺省属性
上锁
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex)
成功返回0 失败返回错误码
mutex指向要初始化的互斥对象
如果无法获得锁 任务阻塞
解锁
#include <pthread.h>
int phread_mutex_unlock(pthread_mutex_t *mutex)
成功返回0 失败返回错误码
mutex指向要初始化的互斥对象
执行完临界区要及时释放锁
#include <uistd.h>
和sleep大致相同 不过它的单位是微秒
Ps:
unsigned int count, value1,, value2;
pthread_mutex_t lock
void *function(void *arg);
int main(void)
{
pthread_t a_thread;
if(pthread_mutex_init(&lock, NULL) != 0)
{
printf("fail to pthread_mutex_init\n");
exit(-1);
}
if(pthread_create(&a_thread, NULL, function, NULL) !=0 )
{
printf("fail to pthread_create");
exit(-1);
}
while(1)
{
count++;
#ifder _LOCK_
pthread_mutex_lock(&lock);
#endif
value1 = count;
value2 = count;
#ifder _LOCK_
pthread_mutex_unlock(&lock);
#endif
return 0;
}
}
void *function(void *arg)
{
while(1)
{
#ifder _LOCK_
pthread_mutex_lock(&lock)
#endif
if(value1 != value2)
{
printf("value1 = %u, value2 = %u\n", value1, value2);
usleep(100000);
}
#ifdef _LOCK_
pthread_mutex_unlock(&lock);
#endif
}
return NULL;
}
}
线程间通信————互斥相关推荐
- [Python]线程实例化;互斥锁;线程间通信
目录 1.使用threading创建线程 2.线程锁(互斥锁) 线程间通信 ----------到此,结束------------ 图穷匕见 1.使用threading创建线程 threading模块 ...
- android线程间通信的几种方法_Android 技能图谱学习路线
Java基础 Java Object类方法 HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理 HashMap 和 HashTable 区别 HashCode 作用,如何重载hashC ...
- linux线程间通信优点,进程间通信与线程间通信【转】
一个进程写管道:写入字节数小于PIPE_BUF是原子操作,写操作在管道缓冲区没有及时读走时发生阻塞. 一个进程读管道:读操作在管道缓冲区没有数据时发生阻塞. 以前一直想找个机会总结一下进程和线程的通信 ...
- Python中的线程间通信
Python中的线程间通信 文章目录 Python中的线程间通信 1.Queue 2.同步机制 1.Event 2.Semaphore(信号量) 3.Lock(锁) 4.RLock(可重入锁) 5.C ...
- Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信
前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...
- Java多线程编程-(4)-线程间通信机制的介绍与使用
上一篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...
- Unix/Linux IPC及线程间通信总结
一.互斥与同步 1.互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性.但互斥无法限制访问者对资源的访问顺序,即访问是无序的. 2.同步:是指在互斥的基础上(大多数情况),通过其它 ...
- Java多线程:线程间通信之volatile与sychronized
由前文Java内存模型我们熟悉了Java的内存工作模式和线程间的交互规范,本篇从应用层面讲解Java线程间通信. Java为线程间通信提供了三个相关的关键字volatile, synchronized ...
- 常用并发工具类(锁和线程间通信工具类)
常用并发工具类总结 JUC 下的常用并发工具类(锁和线程间通信工具类),主要包括 ReentrantLock.ReentrantReadWriteLock.CountDownLatch.CyclicB ...
最新文章
- 踩坑了,JDK8中HashMap依然会产生死循环问题!
- 用java编写一个函数,统计一个字符串中每个字母出现的次数
- 【C#】【APK】APK文件解析AXML-层层深入APK文件解析之一
- MapInfo数据到ARCGIS数据Shapefile的转换
- 【Linux】15.mdc启动网卡并设置其ip和子网掩码
- linux sed面试题,【2021最新版】Linux面试题总结(48道题含答案解析)
- 程序员抱怨:父母没文化没见识,当初努力学习远离看来是正确的
- Uni-G/ The University of Glasgow (Uni-G) ECG Analysis Program
- ubuntu 11.10 因为gcc版本过高引起的错误,安装 gcc 4.4(转)
- linux全局查找-find,locate,whereis,which,type区别
- cb使用msagent
- python英语单词 扇贝英语安卓下载_扇贝单词英语版下载-扇贝单词英语版手机客户端APP 3.4.503 安卓版-我游网...
- Android 智能手机程序使用历史记录查询
- java来电_java串口 来电显示
- java实现Calendar求两个日期差
- 夫妻贷款买房需要注意什么
- 仿QQ设置头像(拍照/选择照片)
- jooq从入门到精通(一)
- 新鲜出炉2018年上半年(低、中、高价位)SUV车型销量排行榜
- 添加百度统计,有利于网站SEO,百度终于发声了
热门文章
- ADS-B显示终端5.9
- [转]粵語固有辭彙與漢語北方話辭彙對照
- 百度文档搜索与Google文档搜索的简单比较
- jenkins修改pom文件_动手实践:美化 Jenkins 报告插件的用户界面
- linux如何解除密码,如何在Linux下解除PDF文件的密码?
- php5.5 session,(五)ThinkPHP实践之Session驱动-TTLSA
- fis pure开发php,50个精品网站鉴赏
- matlab 多文件编程,是否有可能在MATLAB中为每个文件定义多个函数,并从该文件外部访问它们?...
- android q升级名单,华为升级 Android Q 机型名单敲定 阵容庞大
- android 代码获取屏幕图像,安卓获取屏幕以及获得像素点 ~ 大树洞