linux信号量使用

#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#include <stdio.h>

sem_t sem1,sem2;

void func1(char * string){

    int i = 0;

    while(i<100){

    sem_wait(&sem1);

    printf("%s\n",string);
    i++;

    sem_post(&sem2);  //因为sem2 在 fun2里面被用掉了,并没有post。  //等fun1输出完成之后,再post,fun2就wait到了sem2,确保了fun1和fun2能交替运行

    }

}

void func2(char * string){

    int i = 0;

    while(i<100){

    sem_wait(&sem2);

    printf("%s\n",string);
    i++;

    sem_post(&sem1);

    }

}

int main(){

    sem_init(&sem1,0,1);
    sem_init(&sem2,0,1);

    pthread_t tid1,tid2; 

    pthread_create(&tid1,NULL,(void *)func1,"In A Thread!");
    pthread_create(&tid2,NULL,(void *)func2,"In B Thread!");

    pthread_join(tid1,NULL);
    pthread_join(tid2,NULL);

}
时间: 2024-10-05 15:22:48

linux信号量使用的相关文章

linux信号量之进程间同步

概念 linux信号量:允许多个线程同时进入临界区,可以用于进程间的同步. 和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区. 所在头文件:semaphore.h 主要函数 初始化函数 int sem_init(sem_t *sem, int pshared, unsigned int value) sem:要初始化的信号量 pshared:此信号量是在进程间共享还是线程间共享 value:信号量的初始值 删除函数 int sem_destroy(sem_t *sem) sem:要销

Linux信号量详解

1.什么是信号量信号量是一种特殊的变量,访问具有原子性.只允许对它进行两个操作:1)等待信号量当信号量值为0时,程序等待:当信号量值大于0时,信号量减1,程序继续运行.2)发送信号量将信号量值加1. 我们使用信号量,来解决进程或线程间共享资源引发的同步问题. 2.Linux中信号量的使用Linux提供了一组信号量API,声明在头文件sys/sem.h中.1)semget函数:新建信号量 int semget(key_t key,int num_sems,int sem_flags); key:信

Linux 信号量 生产者消费者小例题 (嘘,我是菜鸟~)

菜鸟偶遇信号量,擦出火花(只有不熟才会有火花).于是上网搜资料和看<Unix环境高级编程>实现了几个小例题,高手请勿喷!这几位写得非常好啊: 题目来源: http://www.it165.net/os/html/201312/7039.html 信号量及其用法:http://www.cnblogs.com/hjslovewcl/archive/2011/03/03/2314341.html Mutex与Semaphore区别著名的厕所理论:http://koti.mbnet.fi/niclas

Linux 信号量互斥编程

所谓信号量,其实就是一个数字.内核给这个数字赋予一定的含义,让它等于不同的值时所表示的意义不同.这样就可以用它来标示某种资源是否正被使用.信号的分类其实挺多的,主要还是二值和计数器.这里讨论二值 现在有个文件,有两个进程要同时访问它.进程A 要往里面写入 "Math class is cancel",进程B 要往里面写入“English test”.正常情况下这两个信息会被完整的写入文件中.但是如果进程A写到"Math class" 就暂停,接着B进程就开始写“En

linux 信号量之SIGNAL 0&lt;转&gt;

我们可以使用kill -l查看所有的信号量解释,但是没有看到SIGNAL 0的解释. [[email protected]~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18

Linux信号量

sem_init的应用 (1)信号量用sem_init函数创建的,下面是它的说明: #include<semaphore.h> int sem_init (sem_t *sem, int pshared, unsigned int value); 这个函数的作用是对由sem指定的信号量进行初始化,设置好它的共享选项,并指定一个整数类型的初始值.pshared参数控制着信号量的类型.如果 pshared的值是0,就表示它是当前进程的局部信号量或者说为线程的共享信号量:否则,其它进程就能够共享这个

[转] linux 信号量之SIGNAL

我们可以使用kill -l查看所有的信号量解释,但是没有看到SIGNAL 0的解释. [[email protected]~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18

Linux 信号量同步编程

前一篇文章概述了Linux 系统中信号量互斥编程,这篇文章正好是前一篇的姊妹篇----信号量同步.说它们是姊妹篇是因为它们都是利用了内核的信号量机制实现了进程间的通信.因为两者所解决的问题不同,因此它们使用的场景就会有所区别. 信号量互斥主要解决的问题是:进程间需要同时访问某种资源,但是它们对资源的操作会互相影响对方的操作结果,因此需要一种机制实现让进程在访问资源时能禁止其他进程访问相同的资源.而信号量同步则解决了另一个经典问题:生产者和消费者之间的协同工作问题. 首先描述一下生产者和消费者问题

Linux信号量实践(1)

进程的同步与互斥 顺序程序与并发程序特征 顺序程序 并发程序 顺序性 共享性 封闭性:(运行环境的封闭性) 并发性 确定性 随机性 可再现性 进程互斥 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥. 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源. 在进程中涉及到互斥资源的程序段叫临界区. 互斥示例 说明:如果此时票数X=1,A进程与B进程同时抢到临界资源X,都执行X--,则会出现X<0的情况,这种情况肯定是不

linux信号量的SEM_UNDO参数

信号量是不同进程间或一个给定进程内部不同线程间同步的机制.System V信号量是一个或多个信号量的集合,其中的每一个都是氮素的计数信号量.System V信号量由内核维护,主要函数有:semget,semop,semctl. 我们重点来讨论semop函数,该函数的主要功能是对信号进行PV操作. P操作负责把当前进程由运行状态转换为阻塞状态,知道另外一个进程唤醒它.操作为:申请一个空闲资源(把信号量减1),若成功,则退出,若失败,则该进程被阻塞. V操作负责把被阻塞的进程唤醒,它有一个参数表,存