linux c 网络编程与信号量,详解Linux多线程使用信号量同步
信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆。
一、什么是信号量
线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。
而只有0和1两种取值的信号量叫做二进制信号量,在这里将重点介绍。而信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。我们可以使用二进制信号量来完成这个工作。
二、信号量的接口和使用
信号量的函数都以sem_开头,线程中使用的基本信号量函数有4个,它们都声明在头文件semaphore.h中。
1、sem_init函数
该函数用于创建信号量,其原型如下:
int sem_init(sem_t *sem, int pshared, unsigned int value);
该函数初始化由sem指向的信号对象,设置它的共享选项,并给它一个初始的整数值。pshared控制信号量的类型,如果其值为0,就表示这个信号量是当前进程的局部信号量,否则信号量就可以在多个进程之间共享,value为sem的初始值。调用成功时返回0,失败返回-1.
2、sem_wait函数
该函数用于以原子操作的方式将信号量的值减1。原子操作就是,如果两个线程企图同时给一个信号量加1或减1,它们之间不会互相干扰。它的原型如下:
int sem_wait(sem_t *sem);</
linux c 网络编程与信号量,详解Linux多线程使用信号量同步相关推荐
- linux 查看网络流量来源_详解Linux查看实时网卡流量的几种方式
在工作中,我们经常需要查看服务器的实时网卡流量.通常,我们会通过这几种方式查看Linux服务器的实时网卡流量. 1. sar -n DEV 1 2 sar命令包含在sysstat工具包中,提供系统的众 ...
- Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 识别数据文件信息
识别数据文件信息主要是指对mp3数据格式识别 定义顺序代码如下 typedef struct mp3_struct //自定义mp3结构体 {char heade[3]; //tag字符标记char ...
- linux中whoami命令的作用是,linux whoami命令参数及用法详解(linux查看登陆用户名)
linux whoami命令参数及用法详解(linux查看登陆用户名) 2019年05月31日 | 萬仟网科技 | 我要评论 whoami 命令显示登录名.与使用命令 who 并指定 am i 不同, ...
- linux 内存 参数,linux free命令参数及用法详解(linux查看内存命令)
linux free命令参数及用法详解(linux查看内存命令) 2019年05月31日 | 萬仟网科技 | 我要评论 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段 ...
- linux中的su-命令的功能,linux su命令参数及用法详解(linux切换用户命令)
linux su命令参数及用法详解(linux切换用户命令) 发布时间:2012-07-21 12:12:39 作者:佚名 我要评论 su的作用是变更为其它使用者的身份,超级用户除外,需要键入 ...
- linux 的中断 命令,linux skill命令参数及用法详解(linux中断进程执行命令)
linux skill命令参数及用法详解(linux中断进程执行命令) 发布时间:2012-07-21 12:09:37 作者:佚名 我要评论 linux 冻结进程命令 skill 使用详解 ...
- linux命令优先级设置,linux renice命令参数及用法详解(linux修改程序运行优先级命令)...
linux renice命令参数及用法详解(linux修改程序运行优先级命令) 发布时间:2012-07-21 12:45:32 作者:佚名 我要评论 renice指令可重新调整程序执行的优先 ...
- linux网络编程常用函数详解与实例(socket--bind--listen--accept)
常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...
- linux下的arp刷新命令详解,linux arp 命令常用参数详解
linux arp 命令常用参数详解 linux arp 命令常用参数详解 显示和修改地址解析协议(ARP)使用的"IP 到物理"地址转换表. ARP -s inet_addr e ...
- linux rm命令参数及用法详解---linux删除文件或目录命令
http://www.linuxso.com/command/rm.html linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个 ...
最新文章
- 人脑启发AI设计:让神经网络统一翻译语音和文本
- c语言send方法,高效编写代码的方法(九):了解objc_msgSend
- 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
- brasb 密码自动应答
- 无法加载站点/服务的所有 ISAPI 筛选器,因此启动中止——Service Unavailable解决方法合集...
- 应届生简历如何写实习经历?
- PDF转Word的免费软件推荐
- 从计算机硬件系统来看 不管计算机配置,计算机组装与维修章节练习题201311
- 哇哦!?固件裁剪到1.82K? 他们是怎么做到的?
- 力扣刷题 DAY_74 回溯
- Linux那些事儿 之 我是PCI(1)PCI,我们来了
- developer.biao.daily.20140731
- 使用经验 1 C++程序由哪些部分构成
- 在线客服系统的功能有哪些是非常重要的?
- [转] 公共DNS,114.114.114.114和8.8.8.8
- JS 判断input输入框日期时间格式是否符合YY-MM-DD HH:MM:SS和是否符合实际日期规范方法以及SQL时间日期格式转化存储
- asp.net DES加密解密
- 11-字符串的格式化
- sql查询语句-平均分、最高最低分、排序
- 成都网站建设SEO 成都网站SEO优化方案制作