有没有 linux 和 windows 通用的 多线程库?
ChatGPT:
是的,C++11 标准引入了一个名为 std::thread
的多线程库,它可以在 Windows 和 Linux 上使用。std::thread
库提供了一种方便的方式来创建和管理线程,包括启动、等待、终止和同步线程。此外,它还提供了一些便利的功能,例如线程局部存储和异步执行任务等。
使用 std::thread
需要包含 <thread>
头文件,示例代码如下:
#include <iostream> #include <thread> void myThreadFunc(int i) { std::cout << "Thread " << i << " started." << std::endl; } int main() { std::thread t1(myThreadFunc, 1); std::thread t2(myThreadFunc, 2); t1.join(); t2.join(); return 0; }
这个例子创建了两个线程,每个线程都调用 myThreadFunc
函数,并传递不同的参数。主线程等待两个线程都完成之后才会结束。
std::thread 如何实现线程互斥锁?
ChatGPT:
在C++11标准中,提供了 std::thread
和 std::mutex
两个类来实现多线程和互斥锁。
下面是一个使用 std::thread
和 std::mutex
实现线程互斥锁的示例代码:
#include <iostream> #include <thread> #include <mutex> std::mutex mtx; void thread_function(int id) { mtx.lock(); std::cout << "Thread " << id << " starts working." << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "Thread " << id << " finishes working." << std::endl; mtx.unlock(); } int main() { std::thread t1(thread_function, 1); std::thread t2(thread_function, 2); t1.join(); t2.join(); return 0; }
在上面的示例代码中,使用了 std::mutex
类来创建互斥锁。在 thread_function
函数中,调用了 mtx.lock()
来锁定互斥锁,使得只有一个线程可以进入临界区。在临界区内,线程会执行一些操作,然后再调用 mtx.unlock()
来释放互斥锁,以便其它线程可以进入临界区。最后,在主函数中,调用了 t1.join()
和 t2.join()
来等待两个子线程的执行结束。
需要注意的是,在使用互斥锁时,需要确保每个线程都能够正确地获取和释放锁,否则就会出现死锁或者竞态条件等问题。
标签:std,include,thread,c++,互斥,线程,摘记,多线程 From: https://www.cnblogs.com/nanfei/p/17302907.html