摘要: 原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”. (1) 使用总线锁保证原子性 如果多个处理器同时对共享变量进行读写操作,那么共享变量就会被多个处理器同时进行操作,这样读写操作就不是原子的,操作完之后共享变 阅读全文
posted @ 2018-06-11 14:48 KeepInYourMind 阅读(5410) 评论(0) 推荐(1) 编辑
摘要: lock_guard boost::mutex mutex; boost::lock_guard<boost::mutex> lock(mutex); boost::mutex mutex; boost::lock_guard<boost::mutex> lock(mutex); boost::mu 阅读全文
posted @ 2018-06-11 14:42 KeepInYourMind 阅读(4272) 评论(0) 推荐(0) 编辑
摘要: 1. 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁)。 引用 cppreference 的介绍: 方法1:直接操作 mutex,即直接调用 mutex 的 lock / unlock 函数此例顺带使用了 boost::thread_group 来创建一组线程 阅读全文
posted @ 2018-06-11 14:39 KeepInYourMind 阅读(66720) 评论(0) 推荐(1) 编辑
摘要: 什么是线程的同步与互斥? 互斥:指在某一时刻指允许一个进程运行其中的程序片,具有排他性和唯一性。 对于线程A和线程B来讲,在同一时刻,只允许一个线程对临界资源进行操作,即当A进入临界区对资源操作时,B就必须等待;当A执行完,退出临界区后,B才能对临界资源进行操作。 同步:指的是在互斥的基础上,实现进 阅读全文
posted @ 2018-06-11 14:22 KeepInYourMind 阅读(973) 评论(0) 推荐(0) 编辑
摘要: 以boost为例。boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象; (2)explicit thread(const boost::function0<void>& threadfunc): boost::function0<void>可以简单 阅读全文
posted @ 2018-06-11 13:09 KeepInYourMind 阅读(2485) 评论(0) 推荐(0) 编辑
摘要: thread::join(): 阻塞当前线程,直至 *this 所标识的线程完成其执行。*this 所标识的线程的完成同步于从 join() 的成功返回。 该方法简单暴力,主线程等待子进程期间什么都不能做。thread::join()会清理子线程相关的内存空间,此后thread object将不再和 阅读全文
posted @ 2018-06-11 12:37 KeepInYourMind 阅读(41385) 评论(0) 推荐(1) 编辑
摘要: 条件变量(Condition Variable)的一般用法是:线程 A 等待某个条件并挂起,直到线程 B 设置了这个条件,并通知条件变量,然后线程 A 被唤醒。经典的「生产者-消费者」问题就可以用条件变量来解决。 这里等待的线程可以是多个,通知线程可以选择一次通知一个(notify_one)或一次通 阅读全文
posted @ 2018-06-11 11:02 KeepInYourMind 阅读(1020) 评论(0) 推荐(0) 编辑