信号量是什么? 信号量是用在不同进程之间或者是不同进程的线程之间用来同步会用到的源语。用于保护代码段,只能被一个进程或者是线程执行,这种工作需要一个二进制的开关。 获得共享资源进程需要执行的步骤 (1)测试控制该资源的信号 量。 (2)如果信号量为正,表示可以使用当前的信号量,信号量值减1,使用完成后,对值加1,便于其他进程使用。 (3)若信号量=0,就进入休息状态,信号量值>0,进程可以从新唤醒,进入(1)。 怎样知道信号量确保能+1 和执行-1呢? 原子操作,
函数原型:
#include<sys/sem.h>#include<sys/ipc.h>#include<sys/types.h>int segmet(key_t key,int nsems,int flag);int semop(int semid,struct sembuf* sops,size_t num_sops);int semctl(int semid, int nsems,int cmd...);CSAPP (p736 )
#include <stdio.h>#include <stdlib.h>#include <signal.h> // our new library volatile sig_atomic_t flag = 0;void my_function(int sig){ // can be called asynchronously flag = 1; // set flag}int main(){ // Register signals signal(SIGINT, my_function); // ^ ^ // Which-Signal |-- which user defined function registered while(1) if(flag){ // my action when signal set it 1 PRintf("/n Signal caught!/n"); printf("/n default action it not termination!/n"); flag = 0; } return 0;}新闻热点
疑难解答