![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux C/C++编程
文章平均质量分 61
cui_vv
这个作者很懒,什么都没留下…
展开
-
虚假唤醒
为什么条件锁会产生虚假唤醒现象(spurious wakeup)?pthread_cond_wait()通常是通过操作系统的系统调用完成的,例如Linux是通过futex,对于这些阻塞的系统调用在进程被信号中断后,就会终止阻塞,并返回EINTR错误。对于read(),write()这些IO操作只需要再次重试即可,但是pthread_cond_wait()不能,因为在本线程拿到EINTR错误到futex重新执行的过程中,已经有其他线程通过pthread_cond_signal或者pthread_cond_原创 2021-02-08 19:42:03 · 308 阅读 · 0 评论 -
cond.wait()为什么要使用mutex变量来保持同步
cond.wait()为什么要使用mutex变量来保持同步本文将通过一个线程池实例来解释cond.wait()为什么需要使用mutex代码如下,线程池使用生产者和消费者模式,使用一个队列来存储任务,addTask()函数供外部调用不断往队列中生产任务,子线程不断在队列中处理(消费)任务。其中使用condition_variable变量和mutex变量来保证互斥与同步。#include "ThreadPool.h"#include <iostream>using JobFunc原创 2021-02-08 16:57:51 · 1376 阅读 · 0 评论 -
socket操作封装
socket操作封装本文将unix中的socket相关操作进行封装,使得对socket的调用更加方便、直观头文件SocketHel.h#ifndef SOCKETSHEL__H__#define SOCKETSHEL__H__#include <arpa/inet.h>#include <cstring> //memsetvoid setnbAndcoeHel(int socketfd);int createNonblockingHel(int port原创 2021-02-07 17:23:51 · 341 阅读 · 1 评论 -
Linux的五种IO模型
Linux的五种IO模型 操作系统将内存分为用户空间和内核空间,内核空间中存放的是内核代码和数据,例如进程、线程以及内存的管理,用户空间保存的是用户程序的代码和数据,一般是指应用程序。操作系统和驱动程序运行在内核空间,用户程序在用户空间运行,因此两者不能通过简单地指针传递完成数据传输,必须通过系统调用与内核协助完成IO。 内核会为每个IO设备维护一个缓冲区,当进行系统IO操作时,内核会先查看缓冲区中是否有相应的缓冲数据,如果没有则到设备中读取。完成一次网络输入操作一般包括两个...原创 2021-02-07 16:29:20 · 167 阅读 · 0 评论