专门做捷径网站,帝国cms更改网站ico,网新网站建设合同,网站制作中英文天津在做一些比较大的项目的时候#xff0c;需要实现线程同步#xff0c; 这里结合一个小示例#xff0c;进行线程同步的讲解
问题定义
以下是一个使用 C 多线程和条件变量的示例#xff0c;展示了线程 A 接收一个 enable 信号并通知线程 B 开始工作。线程 B 在开始工作之前…在做一些比较大的项目的时候需要实现线程同步 这里结合一个小示例进行线程同步的讲解
问题定义
以下是一个使用 C 多线程和条件变量的示例展示了线程 A 接收一个 enable 信号并通知线程 B 开始工作。线程 B 在开始工作之前将 enable 信号设置为 false然后执行其任务。
#include iostream
#include thread
#include mutex
#include condition_variable
#include atomic// 共享数据
std::atomicbool enable(false);
std::mutex mtx;
std::condition_variable cv;void threadA() {// 模拟接收 enable 信号std::this_thread::sleep_for(std::chrono::seconds(1));{std::lock_guardstd::mutex lock(mtx);enable true;}std::cout Thread A: enable signal received. Notifying thread B. std::endl;cv.notify_one(); // 通知线程 B
}void threadB() {std::unique_lockstd::mutex lock(mtx);// 等待 enable 信号cv.wait(lock, [] { return enable.load(); });std::cout Thread B: Received notification. Setting enable to false. std::endl;enable false; // 将 enable 信号设置为 false// 进行工作std::cout Thread B: Working... std::endl;std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟工作std::cout Thread B: Work done. std::endl;
}int main() {std::thread tA(threadA);std::thread tB(threadB);tA.join();tB.join();return 0;
} 代码说明
共享数据 enable使用 std::atomicbool 进行原子操作确保线程安全。mtx互斥锁用于保护共享数据。cv条件变量用于线程之间的同步。 **threadA**** 函数** 模拟接收 enable 信号。设置 enable 为 true表示信号已接收。通知线程 B。 **threadB**** 函数** 等待 enable 信号。条件变量 cv.wait 保证线程在 enable 为 true 之前不会继续执行。在接收到通知后将 enable 设置为 false。执行其任务。 **main**** 函数** 创建并启动线程 A 和线程 B。等待线程 A 和线程 B 完成。
这个示例展示了如何使用条件变量和原子变量进行线程间的同步和数据共享。