随笔分类 - 多线程
摘要:直接上代码: 在main函数中会先创建两个wait thread, 然后在创建两个post线程,运行多次会发现pthread_cond_signal丢失的显现,如下图: 可以发现执行post的条件是获取mutex, 这个mutex是所有情况大家都共用的,所以就会存在可能:wait 和 post都在等
阅读全文
摘要:首先第一个区别条件变量有广播的功能,所以当实现订阅的时候,需要广播事件的时候必须使用条件变量,而semaphore只能出发一个订阅 有人这么说: Conditional variable is essentially a wait-queue, that supports blocking-wait
阅读全文
摘要:这里面见到的同步和互斥的概念非常清晰,转载自: http://www.cnblogs.com/King-Gentleman/p/4311582.html 一、进程间通信机制 rt-thread操作系统的IPC(Inter-Process Communication,进程间同步与通信)包含有中断锁、调
阅读全文
摘要:基于上一节生产者消费者问题--进阶再结合顺序循环队列来实现生产者消费者问题主要变化就是把需要操作的资源变成操作循环队列,代码如下:circularQueue.h#include #include #include #include #include #define FREE(p) \ if (...
阅读全文
摘要:生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作...
阅读全文
摘要:互斥量和信号量的区别1. 互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其...
阅读全文
摘要:http://blog.csdn.net/zjf280441589/article/details/43883055
阅读全文
摘要:通过linux下文件互 斥地打开,实现线程/进程互斥的访问资源,以此实现多线程编程。值得注意的是,文件互斥的方式不但适用于多线程编程,还能实现多进程之间的交互。lock.h#include #include #include #include #include void initlock (cons...
阅读全文
摘要:条件变量与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一...
阅读全文
摘要:问题描述一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭,如图2-10所示。哲学家们倾注毕生精力用于思考和进餐,哲学家在思考时,并不影响他人。只有当哲学家饥饿的时候,才试图拿起左、 右两根筷子(一根一根地拿起)。如果筷子已在他人手上,则需等待。饥饿的哲学家只有同时拿到...
阅读全文
摘要:读写锁读写锁适合于对数据结构的读次数比写次数多得多的情况.因为,读模式锁定时可以共享,以写 模式锁住时意味着独占,所以读写锁又叫共享-独占锁.初始化和销毁:#include int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, cons...
阅读全文
摘要:见源码:/********* 说明:********* 1.要让读者与写者之间、以及写者与写者之问要互斥地访同数据集;********* 2.在无写进程到来时各读者可同时访问数据集;********* 3.在读者和写者都等待时访问时写者优先.*********/#includ...
阅读全文
摘要:互斥量(mutex)互斥锁创建有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER 来静态初始化互斥锁,方法如下:pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;在LinuxThreads实...
阅读全文
摘要:转载自:http://mingxinglai.com/cn/2013/06/mutil-threads/对于线程,进程的概念一直都是比较模糊,最近整理了一下。总结起来就是,线程是进程的一部分,进程是程序的一部分。这个说法不准确,但是可以指出期间的差别;进程是具有一定独立功能的程序关于某个数据集合上的...
阅读全文
摘要:六、线程的作用域函数pthread_attr_setscope和pthread_attr_getscope分别用来设置和得到线程的作用域,这两个函数的定义如下:7.名称::pthread_attr_setscopepthread_attr_getscope功能:获得/设置线程的作用域头文件:#inc...
阅读全文
摘要:一.线程属性线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。1.名称::pthread_attr_init/pthre...
阅读全文
摘要:6.名称::pthread_detach功能:使线程进入分离状态。头文件:#include 函数原形:int pthread_detach(pthread_t tid);参数:返回值:若成功则返回0,否则返回错误编号。在默认情况下,线程的终止状态会保存到对该线程调用pthread_join,如果线程...
阅读全文
摘要:一.什么是线程在一个程序里的多个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的一个控制序列”。典型的unix进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。二.线程的优...
阅读全文