0%

多线程

多线程

C++11新标准多线程支持库
< thread > : 提供线程创建及管理的函数或类接口;
< mutex > : 为线程提供获得独占式资源访问能力的互斥算法,保证多个线程对共享资源的同步访问;
< condition_variable > : 允许一定量的线程等待(可以定时)被另一线程唤醒,然后再继续执行;
< future > : 提供了一些工具来获取异步任务(即在单独的线程中启动的函数)的返回值,并捕捉其所抛出的异常;
< atomic > : 为细粒度的原子操作(不能被处理器拆分处理的操作)提供组件,允许无锁并发编程。

并发与并行

  • 并发:同一时间段内可以交替处理多个操作,强调同一时段内交替发生。
  • 并行:同一时刻内同时处理多个操作,强调同一时刻点同时发生。

无参函数

1
2
3
4
5
6
7
8
9
10
11
12
13
#define THREADINGNUMS 500
void threadfunc() {
for (int i = 0; i < 100000; i++) {
cout << "thread"<< 1<<":" << i << endl;
}
}
void multithreading(){
std::thread t[THREADINGNUMS];
for (int i = 0; i < THREADINGNUMS; i++) {
t[i] = std::thread(threadfunc);
t[i].detach();
}
}

有参函数

1
2
3
4
5
6
7
8
9
10
11
12
13
#define THREADINGNUMS 500
void threadfunc(int index) {
for (int i = 0; i < 100000; i++) {
cout << "thread"<< index<<":" << i << endl;
}
}
void multithreading(){
std::thread t[THREADINGNUMS];
for (int i = 0; i < THREADINGNUMS; i++) {
t[i] = std::thread(threadfunc,i);
t[i].detach();
}
}

类内部创建线程

join和detach

互斥锁(mutex)

std::mutex mutex;
mutex.lock();
mutex.unlock();
mutex.try_lock()

lock_guard
unique_lock

条件变量

同步与异步

  • 同步:就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。

  • 异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。