C++ 中的同步与互斥 (recursive_mutex,timed_mutex,recursive_timed_mutex, wait_until() , etc
2016-11-03 10:01
471 查看
C++ 中的同步与互斥 (recursive_mutex,timed_mutex,
recursive_timed_mutex, wait_until() , etc
std::ref(a)
Detach: 允许执行该方法的线程脱离其线程对象而继续独立执行。脱离后的线程不再是可结合线程(你不能等待它们执行结束)。
如果主线程比工作线程更早结束,输出结果将如下......
condition_variable:要求任何在等待该条件变量的线程必须先获取std::unique_lock锁。
至少有一个线程发送信号使某个条件变为true。可以使用notify_one()来发送信号,同时唤醒一个正在等待该条件收到信号的处于阻塞状态的线程,或者用notify_all()来唤醒在等待该条件的所有线程。
在多处理器系统中,因为一些复杂情况,要想完全预测到条件被唤醒并不容易,还会出现虚假唤醒的情况。就是说,在没人给条件变量发送信号的情况下,线程也可能会被唤醒。所以线程被唤醒后,还需要检测条件是否为true。因为可能会多次发生虚假唤醒,所以需要进行循环检测。
recursive_timed_mutex, wait_until() , etc
void func(int i, double d, const std::string& s) { //go to work } int main() { std::thread t(func, 1, 12.50, "sample"); } //尽管可以向线程函数传递任意数量的参数,但是所有的参数应当按值传递。如果需要将参数按引用传递,那要向下例所示那样,必须将参数用std::ref 或者std::cref进行封装。
std::ref(a)
除了join方法外,该线程类还提供了另外两个方法:
swap:交换两个线程对象的底层句柄。
Detach: 允许执行该方法的线程脱离其线程对象而继续独立执行。脱离后的线程不再是可结合线程(你不能等待它们执行结束)。
如果主线程比工作线程更早结束,输出结果将如下......
condition_variable:要求任何在等待该条件变量的线程必须先获取std::unique_lock锁。
至少有一个线程发送信号使某个条件变为true。可以使用notify_one()来发送信号,同时唤醒一个正在等待该条件收到信号的处于阻塞状态的线程,或者用notify_all()来唤醒在等待该条件的所有线程。
在多处理器系统中,因为一些复杂情况,要想完全预测到条件被唤醒并不容易,还会出现虚假唤醒的情况。就是说,在没人给条件变量发送信号的情况下,线程也可能会被唤醒。所以线程被唤醒后,还需要检测条件是否为true。因为可能会多次发生虚假唤醒,所以需要进行循环检测。
相关文章推荐
- 互斥锁属性PTHREAD_MUTEX_RECURSIVE
- 多线程(C++)同步Mutex
- C++多线程,互斥,同步
- C/C++ pthread_cond_timedwait()函数使用心得
- C++ 多线程互斥同步
- 最近的一个作业(用c++模拟线程的同步和互斥)
- java synchronized/wait/notify/互斥/同步
- java并发包中的Condition和Lock 取代Synchronized、wait、notify/notifyAll实现线程的同步与互斥
- 《C++ Concurrency in Action》笔记13 std::recursive_mutex
- C++多线程框架 (二)---------Mutex互斥和Sem信号量
- 同步事件,信号量,互斥,临界区,线程,线程池C++实现(win32,linux)
- 互斥锁属性PTHREAD_MUTEX_RECURSIVE
- 【C++】Windows线程的创建、执行、互斥、同步、销毁
- [linux,c++] 基于mutex 的互斥访问队列实现
- C++小品:她来听我的演唱会——C++11中的随机数、线程(thread)、互斥(mutex)和条件变
- C++ 0x 使用condition_variable 与 Mutex 同步两个线程
- android NDK编程:使用posix多线程与mutex互斥同步
- C++多线程框架-----Mutex互斥和Sem信号量
- C/C++:pthread_cond_timedwait阻塞失败(立刻超时返回)
- 线程之间的同步与互斥mutex