当前位置: 首页 > news >正文

线程退出未定义行为

线程退出未定义行为

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
#include <pthread.h>std::mutex mtx;
std::condition_variable cv;
bool ready = false;void worker_thread() {std::unique_lock<std::mutex> lock(mtx);// 如果在此处被pthread_cancel,会导致问题cv.wait(lock, []{ return ready; });std::cout << "Worker thread completed" << std::endl;
}int main() {std::thread t(worker_thread);// 模拟一些工作std::this_thread::sleep_for(std::chrono::milliseconds(100));// 危险操作:在条件变量等待时取消线程
    pthread_cancel(t.native_handle());t.join();  // 这里可能会出现问题return 0;
}

在 C++11 中,当线程在条件变量上等待时被 pthread_cancel 取消,确实会导致未定义行为,通常会使程序调用 std::terminate;最终导致崩溃