并行运行测试时可能会出现以下几种常见错误,并提供相应的解决方法:
示例代码:
#include
#include
#include
int sharedData = 0;
std::mutex mtx;
void testFunc() {
std::lock_guard lock(mtx);
// 访问共享数据的代码
sharedData++;
}
int main() {
std::thread t1(testFunc);
std::thread t2(testFunc);
t1.join();
t2.join();
std::cout << "sharedData: " << sharedData << std::endl;
return 0;
}
示例代码:
#include
#include
#include
bool isReady = false;
std::mutex mtx;
std::condition_variable cv;
void testFunc1() {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::lock_guard lock(mtx);
isReady = true;
cv.notify_one();
}
void testFunc2() {
std::unique_lock lock(mtx);
cv.wait(lock, []{ return isReady; });
// 线程间通信后的代码
std::cout << "Ready!" << std::endl;
}
int main() {
std::thread t1(testFunc1);
std::thread t2(testFunc2);
t1.join();
t2.join();
return 0;
}
示例代码:
#include
#include
#include
#include
std::mutex mtx;
std::ofstream outputFile;
void testFunc(int threadId) {
std::lock_guard lock(mtx);
outputFile.open("output.txt", std::ios_base::app);
if (outputFile.is_open()) {
// 写入文件的操作
outputFile << "Thread " << threadId << ": Hello!" << std::endl;
outputFile.close();
}
}
int main() {
std::thread t1(testFunc, 1);
std::thread t2(testFunc, 2);
t1.join();
t2.join();
return 0;
}
以上是几种常见的并行运行测试时可能出现的错误以及相应的解决方法和示例代码。在进行并行测试时,需要注意线程间的同步和通信,以及对共享资源的访问控制,以避免并发错误和不确定的行为。