互斥

临界资源

一次只允许一个任务(进程,线程)访问的共享资源

临界区

访问临界资源的代码

互斥机制

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;

}

}

线程间通信————互斥相关推荐

  1. [Python]线程实例化;互斥锁;线程间通信

    目录 1.使用threading创建线程 2.线程锁(互斥锁) 线程间通信 ----------到此,结束------------ 图穷匕见 1.使用threading创建线程 threading模块 ...

  2. android线程间通信的几种方法_Android 技能图谱学习路线

    Java基础 Java Object类方法 HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理 HashMap 和 HashTable 区别 HashCode 作用,如何重载hashC ...

  3. linux线程间通信优点,进程间通信与线程间通信【转】

    一个进程写管道:写入字节数小于PIPE_BUF是原子操作,写操作在管道缓冲区没有及时读走时发生阻塞. 一个进程读管道:读操作在管道缓冲区没有数据时发生阻塞. 以前一直想找个机会总结一下进程和线程的通信 ...

  4. Python中的线程间通信

    Python中的线程间通信 文章目录 Python中的线程间通信 1.Queue 2.同步机制 1.Event 2.Semaphore(信号量) 3.Lock(锁) 4.RLock(可重入锁) 5.C ...

  5. Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信

    前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  6. Java多线程编程-(4)-线程间通信机制的介绍与使用

    上一篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  7. Unix/Linux IPC及线程间通信总结

    一.互斥与同步 1.互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性.但互斥无法限制访问者对资源的访问顺序,即访问是无序的. 2.同步:是指在互斥的基础上(大多数情况),通过其它 ...

  8. Java多线程:线程间通信之volatile与sychronized

    由前文Java内存模型我们熟悉了Java的内存工作模式和线程间的交互规范,本篇从应用层面讲解Java线程间通信. Java为线程间通信提供了三个相关的关键字volatile, synchronized ...

  9. 常用并发工具类(锁和线程间通信工具类)

    常用并发工具类总结 JUC 下的常用并发工具类(锁和线程间通信工具类),主要包括 ReentrantLock.ReentrantReadWriteLock.CountDownLatch.CyclicB ...

最新文章

  1. 踩坑了,JDK8中HashMap依然会产生死循环问题!
  2. 用java编写一个函数,统计一个字符串中每个字母出现的次数
  3. 【C#】【APK】APK文件解析AXML-层层深入APK文件解析之一
  4. MapInfo数据到ARCGIS数据Shapefile的转换
  5. 【Linux】15.mdc启动网卡并设置其ip和子网掩码
  6. linux sed面试题,【2021最新版】Linux面试题总结(48道题含答案解析)
  7. 程序员抱怨:父母没文化没见识,当初努力学习远离看来是正确的
  8. Uni-G/ The University of Glasgow (Uni-G) ECG Analysis Program
  9. ubuntu 11.10 因为gcc版本过高引起的错误,安装 gcc 4.4(转)
  10. linux全局查找-find,locate,whereis,which,type区别
  11. cb使用msagent
  12. python英语单词 扇贝英语安卓下载_扇贝单词英语版下载-扇贝单词英语版手机客户端APP 3.4.503 安卓版-我游网...
  13. Android 智能手机程序使用历史记录查询
  14. java来电_java串口 来电显示
  15. java实现Calendar求两个日期差
  16. 夫妻贷款买房需要注意什么
  17. 仿QQ设置头像(拍照/选择照片)
  18. jooq从入门到精通(一)
  19. 新鲜出炉2018年上半年(低、中、高价位)SUV车型销量排行榜
  20. 添加百度统计,有利于网站SEO,百度终于发声了

热门文章

  1. ADS-B显示终端5.9
  2. [转]粵語固有辭彙與漢語北方話辭彙對照
  3. 百度文档搜索与Google文档搜索的简单比较
  4. jenkins修改pom文件_动手实践:美化 Jenkins 报告插件的用户界面
  5. linux如何解除密码,如何在Linux下解除PDF文件的密码?
  6. php5.5 session,(五)ThinkPHP实践之Session驱动-TTLSA
  7. fis pure开发php,50个精品网站鉴赏
  8. matlab 多文件编程,是否有可能在MATLAB中为每个文件定义多个函数,并从该文件外部访问它们?...
  9. android q升级名单,华为升级 Android Q 机型名单敲定 阵容庞大
  10. android 代码获取屏幕图像,安卓获取屏幕以及获得像素点 ~ 大树洞