多线程
文章平均质量分 76
千年缘
这个作者很懒,什么都没留下…
展开
-
SharedMemory 使用介绍
文章目录一、SharedMemory 共享内存简介二、SharedMemory 基本函数1. `int shmget(key_t key, size_t size, int shmflg);`2. `void *shmat(int shmid, const void *shmaddr, int shmflg);`3. `int shmdt(const void *shmaddr);`4. `int shmctl(int shmid, int cmd, struct shmid_ds *buf);`三、Sha原创 2021-05-25 16:09:59 · 2960 阅读 · 0 评论 -
MSGQueue 使用介绍
文章目录一、MSGQueue 消息队列简介二、MSGQueue 基本函数1. `key_t ftok(const char *pathname, int proj_id);`2. `int msgget(key_t key, int msgflg);`3. `int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);`4. `ssize_t msgrcv( int msqid, void *msgp, size_t msgsz, l原创 2021-05-25 16:01:08 · 1596 阅读 · 1 评论 -
FIFO 使用介绍
文章目录一、FIFO 简介二、FIFO 示例代码1. `int mkfifo( const char *pathname, mode_t mode);`一、FIFO 简介无名管道由于没有名字,因此只能用于亲缘关系的进程间通信命名管道提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,这样即使进程不存在亲缘关系,只要可以访问该路径就能够彼此通信FIFO 在文件系统中作为一个特殊的文件而存在,文件内容存放在内存中,当使用 FIFO 的进程退出后,FIFO 文件将继续保存在文件系统中以便原创 2021-05-25 15:51:46 · 827 阅读 · 0 评论 -
PIPE 使用介绍
文章目录一、pipe 简介二、pipe 代码示例一、pipe 简介pipe 也叫无名管道,有如下特点:半双工,同一时刻数据只能一端操作数据只能从一端写入,从另一端读出存储在内存缓冲区,不存储在文件系统中,只能用于父子进程通信数据一旦从管道中读走,就从管道中释放空间二、pipe 代码示例创建无名管道,其中 fd[0] 固定用于读管道,而 fd[1] 固定用于写管道一般文件 I/O 的函数都可以用来操作管道( lseek() 除外)默认情况当管道里没有数据时,另一个进程调用 read(原创 2021-05-25 15:47:01 · 2493 阅读 · 0 评论 -
signal 使用介绍
文章目录一、signal 信号简介二、signal 产生方式1. 用户操作终端2. 硬件异常3. 软件异常4. 调用 `kill()` 函数或者执行 `kill` 命令三、signal 基本函数1. `int kill(pid_t pid, int signum);`2. `int pause(void);`3. `signal(int signum, sighandler_t handler);`4. `int sigqueue(pid_t pid, int sig, const union sigval原创 2021-05-25 15:41:54 · 5786 阅读 · 1 评论 -
semaphore 使用介绍
文章目录一、semaphore 简介二、无名信号量基本函数1. `int sem_init(sem_t *sem, int pshared, unsigned int value);`2. `int sem_post(sem_t *sem);`3. `int sem_wait(sem_t *sem);`4. `int sem_trywait(sem_t *sem);`5. `int sem_getvalue(sem_t *sem, int *sval);`6. `int sem_destory(sem_t原创 2021-05-25 15:12:15 · 3886 阅读 · 1 评论 -
rwlock 使用介绍
文章目录一、rwlock 介绍二、rwlock 基本函数1. `int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);`2. `int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock );`3. `int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);`4. `int pthread_rwloc原创 2021-05-24 17:26:06 · 956 阅读 · 0 评论 -
cond 使用介绍
文章目录一、cond 介绍二、cond 基本函数1. `int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr);`2. `int pthread_cond_wait(pthread_cond_t *cv, pthread_mutex_t *mutex);`3. `int pthread_cond_signal(pthread_cond_t *cv);`4. `int pthread_cond_timedwait(p原创 2021-05-24 17:18:39 · 6850 阅读 · 0 评论 -
spinlock 使用介绍
文章目录一、spinlock 简介二、自旋锁与互斥锁的区别三、自旋锁的优缺点一、spinlock 简介自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,不断尝试获取锁,直到获取到锁才会退出循环二、自旋锁与互斥锁的区别自旋锁与互斥锁类似,它们都是为了解决对某项资源的互斥使用,在任何时刻最多只能有一个线程获得锁对于互斥锁,如果资源已经被占用,调用者将进入睡眠状态对于自旋锁,如果资源已经被占用,调用者就一直循环在那里,看是否自旋锁的保持者已经释原创 2021-05-24 17:09:31 · 3865 阅读 · 0 评论 -
mutex 使用介绍
文章目录一、mutex 基本函数1. `int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);`2. `int pthread_mutex_lock(pthread_mutex_t *mutex);`3. `int pthread_mutex_trylock(pthread_mutex_t *mutex);`4. `int pthread_mutex_unlock(pthread_mutex_原创 2021-05-24 17:02:22 · 2498 阅读 · 2 评论 -
pthread 线程基本函数
文章目录一、`int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);`二、`int pthread_join(pthread_t tid, void **thread_return);`三、`int pthread_detach(pthread_t tid);`四、`void pthread_exit(void *retval);`五、`int pthrea原创 2021-05-24 15:56:17 · 2600 阅读 · 0 评论 -
互斥量和信号量实现线程池
文章目录前言一、线程池模型代码前言在传统服务器结构中,常有一个总的监听线程监听新用户连接服务器,每当有一个新的用户进入,服务器就开启一个新的线程用户处理这个用户的数据包,这个线程只服务于这个用户,当用户与服务器端关闭连接以后,服务器端销毁这个线程然而频繁地开辟与销毁线程极大地占用了系统的资源,线程池基本思想就是在程序开始时就在内存中开辟一些线程,通过对多个任务重用已经存在的线程对象,降低了对线程对象创建和销毁的开销,服务器只需要将数据包交给线程池就可以了当有新的客户请求到达时,不是新创建一个线..原创 2020-12-25 14:41:44 · 264 阅读 · 0 评论 -
信号量实现生产者-消费者模型
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、无名信号量常用函数二、生产者-消费者模型代码前言信号量广泛用于进程或线程间的同步和互斥,本质上是一个非负整数计数器。当信号量值大于 0 时,则可以访问公共资源,否则将阻塞访问PV 是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1信号量一般分为两种:1:无名信号量,一般用于线程间和父子进程间同步或互斥,保存在内存中2:有名信号量,一般用于普通进程间同步或互斥,创建一个文件保存在文件中本文原创 2020-12-25 13:55:18 · 1273 阅读 · 0 评论