
posix
文章平均质量分 90
huangyimo
这个作者很懒,什么都没留下…
展开
-
POSIX线程-基本操作
注意线程相关函数返回值:0-表示成功,>0-表示错误代码。线程的创建int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start)(void *), void *arg)注意点:pthread_t, pthread_attr_t等变量类型,我们应该把他们当做结构体来看待,不能因转载 2015-07-04 16:48:44 · 428 阅读 · 0 评论 -
Linux线程的信号量同步
信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程同时进入临界区。不多做解释,要使用信号量同步,需要包含头文件semaphore.h。主要用到的函数:int sem_init(sem_t *sem, int pshared, unsigned int value);,其中sem是要初始化的信号量,pshared表示此信号量是在进程间转载 2018-01-05 20:37:03 · 252 阅读 · 0 评论 -
线程同步:互斥量与读写锁的异同与性能分析
线程同步简单的说就是当多个线程共享相同的内存时,当某个线程可以修改变量,而其他线程也可以读取或修改这个变量的时候,就需要对这些线程进行同步,以确保他们在访问变量的存储内容时不会访问到无效的数值。我们来看个上面一个对于多线程访问共享变量造成竞争的一个例子假设增量操作分为以下三个步骤(1)从内存单元读入寄存器(2)在寄存器中进行变量值的增加(3)把新的值写回内存单元那么转载 2017-11-18 16:10:20 · 366 阅读 · 0 评论 -
POSIX线程-互斥量
为什么需要互斥量线程最大的好处是它们可以通过全局变量来共享信息。但这个好处也带来了麻烦:有可能很多线程同时修改某一个全局变量,导致该全局变量出现错误。我们必须制定某些规则,使线程对该全局变量的修改不会导致错误。这个规则就是--同步。POSIX线程使用互斥量来进行同步,“经验表明,正确使用互斥量比使用通用信号灯之类的其他同步模型要容易,还能很容易地使用互斥量与条件变量建立任何同步模型”—PO转载 2015-07-04 16:50:37 · 494 阅读 · 0 评论 -
POSIX线程-为什么要用线程
最简单的回答是:线程比进程更快,开销更小。考虑一下下面的场景: 1. 当需要在在进程间共享数据时,我们必须使用IPC来进行通信,因为两个进程间没有“天生”的共享内存区(进程要求虚拟空间独立,如果想共享数据,必须把这几个进程的某个地址映射到相同的物理内存上)。IPC的使用将会导致开销上升。2. 需要创建新进程时,我们使用fork()函数。虽然该函数不会拷贝所有的数转载 2015-07-04 16:47:57 · 346 阅读 · 0 评论 -
POSIX线程-条件变量(二)
pthread_cond_signal()和pthread_cond_wait()的典型使用方法pthread_mutex_t mtx;pthread_cond_t cond;线程A中通知的执行的操作s = pthread_mutex_lock(&mtx)if (s != 0)err_exit();a++;/*谓词条件*/……do s转载 2015-07-04 16:45:06 · 829 阅读 · 0 评论 -
POSIX线程-条件变量(一)
为什么使用条件变量(condition variable)想想我们怎么实现下面的场景:当线程A需要通知线程B某件事情已经准备好,我们该怎么做? 我们通常的做法是:设置一个全局变量V,如果线程A已经准备好了某件事,则把V设置为1;线程B则不停得检测V,直到V变为1再继续下面的操作。这种做法的缺点是非常的浪费CPU,因为线程B需要不停的busy loop。 为了改善这种状况,引入了转载 2015-07-04 16:43:31 · 452 阅读 · 0 评论 -
POSIX线程-Per-Thread Storage
说到per-thread storage,先要谈谈函数的线程安全thread-safety。通常我们把一个能被多个线程同时访问,且函数输出数据不会因为线程访问顺序的不同而不同的函数叫做线程安全的函数。在线程中调用线程不安全的函数时,必须要加锁或串行的执行。否则,会引起不可预料的错误(比如,两个线程同时在调用不可重入的malloc(),导致malloc()的内部全局管理变量混乱,造成内存泄露)。转载 2015-07-04 16:52:30 · 845 阅读 · 0 评论 -
posix线程-线程的取消
初看这个主题时,觉得实在简单。在我印象中,线程取消的实现通常是声明一个全局变量来代表取消标志,一个线程在最开始的大while中判断该标志是否被设置,如果被设置就跳出循环。但是这有一个问题是,如果程序中有n个线程都有可能被取消,那么我们是否要声明n个全局变量来单独控制它们的取消?POSIX提供了一些有效的API来简化我们对线程取消的操作(不过这背后还是有很多复杂的概念)。从很多书上把线程的取消单独作转载 2015-07-04 16:51:39 · 498 阅读 · 0 评论 -
POSIX线程-什么是线程
Wiki百科上是这样定义线程的: In computer science, a thread of execution is the smallest unit of processing that can be scheduled by an operating system. 教课书上定义的是:进程是资源管理的最小单位,线程是程序执行的最小单位。 很多地方说线程转载 2015-07-04 16:47:05 · 365 阅读 · 0 评论 -
C/C++ pthread_cond_timedwait()函数使用心得
由于工作上的事情,要用到线程之间的同步,而且有超时处理,在网上看到了使用pthread_cond_timedwait()函数和pthread_cond_wait()函数,其实2个函数都差不多,我主要是要用pthread_cond_timedwait()函数。 pthread_cond_timedwait()函数有三个入口参数:(1)pthread_cond_t __cond:条件变量(...转载 2018-08-07 20:28:13 · 702 阅读 · 0 评论