在多线程编程中,指针获取错误值是一个常见的问题,可以通过以下方法来解决:
#include
std::mutex mtx;
int* ptr = nullptr;
void ThreadFunction()
{
std::lock_guard lock(mtx);
// 访问ptr的代码
}
int main()
{
ptr = new int(5);
std::thread t(ThreadFunction);
t.join();
delete ptr;
return 0;
}
#include
#include
std::mutex mtx;
std::condition_variable cv;
int* ptr = nullptr;
bool ready = false;
void ThreadFunction()
{
std::unique_lock lock(mtx);
cv.wait(lock, []{ return ready; }); // 等待条件满足
// 访问ptr的代码
}
int main()
{
ptr = new int(5);
ready = true;
cv.notify_one(); // 通知等待的线程条件已满足
std::thread t(ThreadFunction);
t.join();
delete ptr;
return 0;
}
std::atomic
来保证原子性。#include
std::atomic ptr(nullptr);
void ThreadFunction()
{
int* localPtr = new int(5);
ptr.store(localPtr, std::memory_order_relaxed);
}
int main()
{
std::thread t(ThreadFunction);
t.join();
int* p = ptr.load(std::memory_order_relaxed);
// 使用p指针的代码
delete p;
return 0;
}
以上是几种常见的解决方法,根据具体情况选择合适的方法来避免不同线程中指针获取错误值的问题。