mirror of
https://github.com/CaiJimmy/hugo-theme-stack.git
synced 2025-04-29 03:53:30 +08:00
c++
This commit is contained in:
parent
b852ea6c8b
commit
f434569f7d
@ -115,6 +115,47 @@ auto_ptr是C++98中引入的第一个智能指针,但是由于他的不安全
|
|||||||
|
|
||||||
14.多线程中多个信号与主线程
|
14.多线程中多个信号与主线程
|
||||||
|
|
||||||
|
主线程一般是负责控制和协调其他线程的任务。比如说我这个共享单车项目中的服务器,他的主线程主要是负责监听客户端的连接,一旦有客户端来进行连接,我们就会把这个客户端通过libevent变成一个事件,并把他加入到事件集合中去,然后由其他线程来监听该客户端的读写事件,并通过轮询的方式拿到线程池中的一个线程,然后由这个线程通过调用它自己的回调函数来处理这个读写事件.相当于主线程就是是负责统筹规划的,他只复制监听客户端,剩下的交给其他线程.
|
||||||
|
|
||||||
|
然后我的毕设的服务器是只用到了libevent,没有用到线程池,毕设主要的项目亮点是硬件的uboot系统移植以及arm架构下的库的交叉编译,还有qt的自定义部件、界面以及qt打包等,最终形成一个完善的项目.
|
||||||
|
|
||||||
|
然后硬件是用到的一个多进程通信,使用的是shm共享内存
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
在多线程编程中,主线程可以通过发送信号来与其他线程进行通信。
|
||||||
|
|
||||||
|
常见模式有:
|
||||||
|
|
||||||
|
1. **条件变量(Condition Variables)**:相当于是一种基于互斥锁的线程间同步机制,通常情况下是和锁一起使用的。主线程可以使用条件变量来等待特定的条件达成,而其他线程则可以通过发送信号来通知主线程条件的改变。一旦条件满足,主线程就会被唤醒并继续执行。
|
||||||
|
|
||||||
|
2. **事件(Events)**:事件也是一种用于线程间同步的通信机制,通常用于向其他线程发出信号以触发特定事件的发生,然后执行事件的回调函数。主线程可以等待某个事件的发生,其他线程可以通过发送信号来触发该事件。
|
||||||
|
|
||||||
|
3. **信号量(Semaphores)**:
|
||||||
|
|
||||||
|
信号量维护一个计数器,表示可用资源的数量。线程可以通过请求(等待)和释放(发信号)操作来获取和释放资源。当计数器为正时,线程可以继续执行,否则线程会被阻塞直到资源可用。就是我们常说的那个操作系统pv操作,经常用来解决“生产者消费者的问腿”
|
||||||
|
|
||||||
|
伪代码:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
待补充。。。
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
4. **消息队列(Message Queues)**:主线程可以通过发送消息到队列中来通知其他线程,而其他线程则可以从队列中接收消息并执行相应的操作。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user