随笔分类 -  多线程

摘要:socketpair是进程间通信的一种方式。 API: DEMO: 和管道和命名管道相比,socketpair有以下特点: 1. 全双工 2. 可用于任意两个进程之间的通信 阅读全文
posted @ 2017-03-14 13:48 Sawyer Ford 阅读(2608) 评论(0) 推荐(0)
摘要:命名管道(FIFO)是进程间通信的一种方式。 API: DEMO: 两个地方需要注意: 1. mkfifo会在/tmp目录下创建文件my_fifo 2. 读进程open之前,写进程被阻塞 (it has to be open at both ends simultaneously before yo 阅读全文
posted @ 2017-03-14 11:21 Sawyer Ford 阅读(233) 评论(0) 推荐(0)
摘要:管道(pipe)是进程间通信的一种方式。 API: DEMO: 管道的特点: 1. 管道是半双工的(数据只能在一个方向上流动) 2. 管道只能在具有公共祖先的两个进程之间使用 对于从父进程到子进程的管道,父进程关闭管道的读端fd[0],子进程关闭写端fd[1]。 对于从子进程到父进程的管道,父进程关 阅读全文
posted @ 2017-03-14 09:58 Sawyer Ford 阅读(254) 评论(0) 推荐(0)
摘要:问题定义: 现有一块共享内存,多个读进程和多个写进程。多个读进程可以同时读,但是当有一个写进程正在写时,其他任何读进程或写进程都不能执行。该问题有3种变种。第一种称为“读者优先”(readers-preference)。在此情况下,只要有进程在读,写进程就得等待。实现如下:#include #in... 阅读全文
posted @ 2015-08-16 16:54 Sawyer Ford 阅读(1283) 评论(0) 推荐(0)
摘要:信号量是什么?简单来说,信号量就是一个计数值,假设记为S。S > 0时,表示当前可用资源的数目;S = 0 continue;else blocked;V操作:S = S + 1;if S > 0 continue;else wakeup a blocked proces... 阅读全文
posted @ 2015-08-15 19:20 Sawyer Ford 阅读(471) 评论(0) 推荐(0)
摘要:条件变量是线程同步的另一种手段,主要逻辑就是等待和唤醒。条件不满足时,线程等待;条件满足,线程被(其他线程)唤醒。条件变量一般和互斥量一起使用,因为需要保证多线程互斥地修改条件。涉及到的函数有:int pthread_cond_init(pthread_cond_t *restrict cond... 阅读全文
posted @ 2015-08-15 16:05 Sawyer Ford 阅读(391) 评论(0) 推荐(0)
摘要:谈到多线程编程,同步是一定要讲的。给个例子: #include <stdio.h> #include <stdlib.h> #include <pthread.h> int count = 0; #define N 100000 void* fun() { int i; for (i = 0; i 阅读全文
posted @ 2015-08-14 14:34 Sawyer Ford 阅读(347) 评论(0) 推荐(0)
摘要:linux下的多线程通过pthread实现,下面给个简单的例子。#include #include #include void* thr_fn(){ printf("this is a thread, tid = %d\n", pthread_self()); printf("thr... 阅读全文
posted @ 2015-08-14 10:30 Sawyer Ford 阅读(171) 评论(0) 推荐(0)