lsd
那年晴天
汽车行业
展开
-
进程间、线程间通信方式小结
一、进程间的通信方式# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机转载 2017-03-22 10:41:02 · 226 阅读 · 0 评论 -
pthread_create函数创建线程失败的原因
自己在arm上进行测试,pthread_create函数竟然出错了,有点吃惊。自己百度后明白,是因为线程资源的问题:没有进行资源的回收。可是自己确定自己的代码在这一块没有出现问题,找了好久发现,有可能是自己arm板子上的资源不足了,自己通过ulimit -s 来设置线程默认栈空间大小,编译通过了。原来真是资源不足呀!linux下pthread_attr_setstacksize函数,是原创 2017-06-07 20:54:57 · 12592 阅读 · 0 评论 -
【Linux多线程】同步与互斥的区别
同步与互斥这两个概念经常被混淆,所以在这里说一下它们的区别。一、同步与互斥的区别1. 同步同步,又称直接制约关系,是指多个线程(或进程)为了合作完成任务,必须严格按照规定的 某种先后次序来运行。例如,线程 T2 中的语句 y 要使用线程 T1 中的语句 x 的运行结果,所以只有当语句 x 执行完成之后语句 y 才可以执行。我们可以使用信号量进行同步:semaph转载 2017-05-25 20:47:11 · 504 阅读 · 0 评论 -
线程的分离状态
其实在写上一篇日志的时候,由于我把创建线程的返回值的判断条件写错了,程序每次运行的时候都是显示创建线程失败,我就百度了一下,有人说是桟资源不足引起的,要调用一个pthread_attr_setdetachstate()函数,当时不明白为什么,其原理是什么,于是又搜了一下,下文是其原理简述:在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结转载 2017-05-02 11:02:55 · 496 阅读 · 0 评论 -
线程同步(互斥锁与信号量的作用与区别)
“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信转载 2017-03-27 11:07:34 · 297 阅读 · 0 评论 -
POSIX线程清理函数
[cpp] view plain copy #include #include #include // Sleep pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; struct Node { in转载 2017-03-27 10:50:02 · 304 阅读 · 0 评论 -
linux 读写锁应用实例
/*使用读写锁实现四个线程读写一段程序的实例,共创建了四个新的线程,其中两个线程用来读取数据,另外两个线程用来写入数据。在任意时刻,如果有一个线程在写数据,将阻塞所有其他线程的任何操作。*/#include #include #include #include #include static pthread_rwlock_t rwlock;//读写锁对象#def转载 2017-03-27 10:40:46 · 752 阅读 · 0 评论 -
window下操作临界资源区替换为linux下的做法
自己要修改项目,使window下的项目可以在linux下可以运行得通。对于多线程操作临界资源区域,window下的操作是通过API函数来操作的。对于linux下操作,则是通过互斥锁来进行操作的。这和window下的代码是不同的,至少不是相似的。不过,步骤倒是相同的。都是初始化,上锁,解锁,摧毁四个步骤来操作的。int pthread_mutex_init(pthread_mutex原创 2017-02-24 18:04:29 · 320 阅读 · 0 评论 -
关于进程间通讯的一些知识
demo后台运行的话,在执行的时候,添加一个&即可后台运行。 要杀死后台进程的话,pkill -9 + filename,就可以杀死进程。原创 2017-03-22 10:35:40 · 167 阅读 · 0 评论 -
Linux 线程分离状态
线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。线程的分离状态决定一个线程以什么样的方式来终止自己。在上转载 2017-03-22 18:52:45 · 455 阅读 · 0 评论 -
线程的简单例子
写一些简单的例子,供以后的参考用。 void* func(void *arg) { #传入参数 int a = *(int *)arg; #主动结束线程 pthread_exit(0); } int main() { pthread_t pthre原创 2017-03-22 18:51:49 · 505 阅读 · 0 评论 -
基于Linux/C++简单线程池的实现
我们知道Java语言对于多线程的支持十分丰富,JDK本身提供了很多性能优良的库,包括ThreadPoolExecutor和ScheduleThreadPoolExecutor等。C++11中的STL也提供了std:thread(然而我还没有看,这里先占个坑)还有很多第三方库的实现。这里我重复“造轮子”的目的还是为了深入理解C++和Linux线程基础概念,主要以学习的目的。首先,为什么要使用线程池。...转载 2018-04-07 22:01:50 · 975 阅读 · 0 评论