linux下交替打印AB代码实现——线程相关函数学习心得

阅读: 评论:0

linux下交替打印AB代码实现——线程相关函数学习心得

linux下交替打印AB代码实现——线程相关函数学习心得

linux下交替打印AB代码实现——线程相关函数学习心得

  • 代码 (LINUX)
        • 运行结果
  • 《LINUX程序设计中文第四版》读书笔记
            • 1.在线程中的信号量函数的定义如下:
            • 2.线程函数了解
            • 3.线程了解

代码 (LINUX)

题目:交替打印AB
利用线程中信号量的P(s)操作和V(s)操作特点完成这个程序,这次的代码实现是先在博客上参考,然后明白原理再次写的。
代码参考:

#include<semaphore.h>
#include<stdlib.h>
#include<pthread.h>
#include<stdio.h>sem_t i_num,j_num;//信号量数据类型sem_t
void *Aa(void *arg)
{while(1){sem_wait(&i_num);//i_num减1,如果i_num为0,在这里阻塞,直到不为0再进行减1printf("%cn",65);//65为A的ascii值sem_post(&j_num); //给j_num加1sleep(rand()%5);}
}
void *Bb(void *arg)
{while(1){sem_wait(&j_num);printf("%cn",66);sem_post(&i_num);sleep(rand()%5);}
}
int main(int argc,char*argv[])
{pthread_t pid,cid;//线程数据类型sem_init(&i_num,0,1);//对信号量进行初始化sem_init(&j_num,0,0);pthread_create(&pid,NULL,Aa,NULL);pthread_create(&cid,NULL,Bb,NULL);pthread_join(pid,NULL);//回收线程,pthread_join(cid,NULL);sem_destroy(&i_num);sem_destroy(&j_num);//销毁信号量
}42,1          Bot
运行结果

《LINUX程序设计中文第四版》读书笔记

1.在线程中的信号量函数的定义如下:

线程中使用的基本信号量函数有4个:
#include<semaphore.h>

  1. int sem_init(sem_t *sem,int pshared,unsignded int value);
    初始化由sem指向的信号量对象,设置他的共享选项,并给它一个初始的整数值。
    pshared参数控制信号量的类型,如果pshared=0,就表示这个信号量是当前进程的局部信号量;如果pshared≠0,这个信号量就可以在多个进程之间共享。
  2. int sem_wait(sem_t * sem);
  3. int sem_post(sem_t * sem);
    函数都以一个指针为参数,该指针指向的对象是由sem_init调用初始化的信号量。
    sem_post作用是以原子操作的方式给信号量的值加1.
    sem_wait作用是以原子操作的方式将信号量的值减1,但必须是非零值才会进行操作,否则就等待直到非零值的出现。
2.线程函数了解

3.线程了解

以下引用来自
原文:

信号量的数据类型为结构sem_t,它本质上是一个长整型的数。

函数sem_post( sem_t *sem )用来增加信号量的值。当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。int sem_post(sem_t *sem);sem_post() 成功时返回 0;错误时,信号量的值没有更改,-1 被返回,并设置errno 来指明错误。错误 EINVAL  sem 不是一个有效的信号量。EOVERFLOW 信号量允许的最大值将要被超过。

函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。
函数sem_destroy(sem_t *sem)用来释放信号量sem,属于无名信号量。

本文发布于:2024-02-01 14:04:15,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170676745737122.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   函数   学习心得   代码   linux
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23