unix 环境中线程间通方式整理
来源:互联网 发布:触摸查询一体机软件 编辑:程序博客网 时间:2024/06/08 01:10
线程间通信常见的同步方式有:互斥锁、条件变量、信号量、管通。
一、 互斥量(Mutex)
通常互斥量和条件变量在多线程中是一块使用的。
二、 条件变量
http://blog.chinaunix.net/uid-20321537-id-1966816.html
三、 信号量
http://blog.csdn.net/jasenwan88/article/details/7766808
英文:semaphore,它是一种专门用于提供不同进程间或线程间同步手段的原语。可以通过下图来理解它。
进程A 进程B
\ /
进程 \ /
----------------------------------------------------
内核 \ /
信号量
也就是说,信号量是由内核来维护的,他独立出进程。因此可以通过它来进行同步。
上图一般来说,是基于Posix有名信号量,可以认为它是系统中的一个特殊文件(因为在Linux中,一切都可以认为是文件),因为在进程间的通信、同步中用的比较多,如果是线程之间
的同步,经常用基于Posix内存的信号量。(基于内存的信号量必须在创建时指定是否在进程间共享,有名信号量随内核有持续性,需手工删除,而基于内存的信号量具有随进程的持续性)
对于信号量的工作原理,其实和互斥锁+条件变量相似。
主要函数有:sem_open、sem_close、sem_unlink,这里要注意,close只是关闭信号量,但并未从系统中删除,而unlink是删除该信号量。
sem_wait和sem_trywait函数,他们和pthread_cond_wait功能相似,都是等待某个条件的成立,sem_wait和sem_trywait的区别是,当所指定的信号量的值为0时,后者并不将调用者投入
睡眠,而是立刻返回EAGAIN,即重试。
sem_post和sem_getvalue函数,sem_post将指定的信号量加一,然后唤醒正在等待该信号量值变为正数的任意线程。sem_getvalue是用来获取当前信号量值的函数。
四 管道
- unix 环境中线程间通方式整理
- unix环境中线程的创建与终止
- UNIX环境高级编程整理
- unix线程通信方式总结
- [Unix环境高级编程] 线程
- unix环境线程编程练习
- unix环境高级编程---线程
- UNIX高级环境编程笔记线程间同步
- Unix环境高级编程学习笔记整理
- 《Unix环境高级编程》:打印线程ID
- 《Unix环境高级编程》:线程和fork
- pthread_create是UNIX环境创建线程函数
- 《unix环境高级编程》-11.线程-读书笔记
- UNIX环境高级编程——线程
- UNIX环境高级编程——线程
- 《UNIX环境高级编程》笔记--线程属性
- unix 环境高级编程 线程一 创建
- unix 环境高级编程 线程二 同步
- C语言生产者与消费者-不同速率实现
- TCP/IP详解学习笔记(13)
- XCode编码背景设置
- 年轻工程师如何锻炼成高手的
- Metasploit安装更新使用错误修复总汇
- unix 环境中线程间通方式整理
- java中二维数组的越界问题
- js中onclick事件同时调用两个方法
- 编程技术以及代码重用
- nodejs+express+websocket+redis实现消息订阅系统
- 按键精灵,鼠标自动点击,游戏助手
- .NET中STAThread和MTAThread
- linux下 简单学习epoll处理海量链接
- c# 内存共享、内存映射文件、适合读取大文件