深入探究多线程编程:从基础到硬件实现
1. 多线程应用基础
多线程应用的基本形式是一个进程包含两个或更多线程。这些线程有多种用途,比如让进程以异步方式响应事件,为每个传入事件或事件类型分配一个线程;或者通过将工作分配到多个线程来加速数据处理。
例如,图形用户界面(GUI)和网络事件可以在不同线程中处理,这样两种事件都无需等待对方,也不会阻碍事件的及时响应。通常,单个线程执行单个任务,如处理 GUI 或网络事件,或处理数据。
下面是一个简单的多线程应用示例:
#include <iostream>
#include <thread>
#include <mutex>
#include <vector>
#include <random>
using namespace std;
// --- Globals
mutex values_mtx;
mutex cout_mtx;
vector<int> values;
void threadFnc(int tid) {
cout_mtx.lock();
cout << "Starting thread " << tid << ".\n";
cout_mtx.unlock();
values_mtx.lock();
int val = values[0];
values_mtx.unlock();
int rval = randGen(0, 10);
val += rval;