0825-0826 信号量与多线程

1.  信号量   kill  -l     13号信号量 (pipe  没有读了,还去写,默认会退出)  

                                 17号信号量 (child 退出时发送 17 号信号量 

 

进程接收到信号以后,可以有如下3种选择进行处理:

 1. 默认处理 signal(SIGINT,SIG_DFL);2.忽略信号 signal(SIGINT,SIG_IGN); 

 3.调用函数 signal(SIGINT,fun )        SIGINT 是2号函数 ,这里SIGNAL 可以换别的信号,自己填'

 

SIGKILL SIGSTOP 这2个信号是 不能被忽略的

 

 

2. 多线程 

pthread_create()                  创建线程

pthread_join()                    回收对应的线程,放MAIN里,在子线程退出后,回收子线程资源

pthread_exit()                    子线程退出,用 EXIT()的话会进程退出

pthread_mutex_init                初始化锁

pthread_mutex_lock                关锁

pthread_mutex_unlock()            解锁

pthread_mutex_destory             销毁锁,放MAIN()中,进程结束时不需要锁后,进行销毁

pthread_self( )                   读线程id 
pthread_detach( )                 回收资源(系统回收) ,放自己线程里

 

条件变量:

pthread_cond_wait()             放入阻塞队列,等待被叫醒

pthread_cond_signal()           阻塞队列有人,则叫醒第一个

pthread_cond_broadcast()        叫醒阻塞队列里的所有人

pthread_cond_init()             条件变量初始化,一般在MAIN()中初始

pthread_cond_destory()          销毁条件变量,一般在main()中销毁

 

 

任务1: 创建线程,实现多窗口卖票;

 

 

任务2: 客户端,服务器, 客户端放送信息给服务器,客户端的信息由 服务器中的线程进行处理,处理完后返回给客户端;

服务器一条总管道,这条管道只接收客户端的上线信息;

客户端的发送信息,接收信息管道均由客户端创建,注意创建管道要放前面。(当在管道创建之前去打开管道的话open()函数会返回-1 )

服务器运用select()函数轮询 信号,与服务器建立联系的客户端连接成一个链表,并将客户端相应的描述符加入select 中,当客户端退出时删除链表中的结点,并且将select中的描述符删除;

服务器接收到的信息任务放在一个消息队列中,子线程互斥的从队列中取任务处理,返回给客户端。

 

任务2详情见 0826代码;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值