在C++中,靜態數組本身并不具有線程安全性。當多個線程同時訪問和修改靜態數組時,可能會導致數據競爭(data race)和未定義行為。為了確保線程安全,你需要使用同步機制來保護對靜態數組的訪問。
以下是一些建議,可以幫助確保在多線程環境中使用靜態數組的安全性:
#include<iostream>
#include<thread>
#include <mutex>
std::mutex mtx; // 全局互斥鎖
static int arr[10];
void thread_function(int index, int value) {
std::unique_lock<std::mutex> lock(mtx); // 獲取互斥鎖
arr[index] = value;
lock.unlock(); // 釋放互斥鎖
}
int main() {
std::thread t1(thread_function, 0, 42);
std::thread t2(thread_function, 1, 13);
t1.join();
t2.join();
return 0;
}
std::atomic
庫。#include<iostream>
#include<thread>
#include<atomic>
static std::atomic<int> arr[10];
void thread_function(int index, int value) {
arr[index].store(value, std::memory_order_relaxed);
}
int main() {
std::thread t1(thread_function, 0, 42);
std::thread t2(thread_function, 1, 13);
t1.join();
t2.join();
return 0;
}
請注意,在使用這些方法時,務必確保正確地管理互斥鎖和原子操作,以避免死鎖和其他并發問題。在實際應用中,根據具體需求選擇合適的同步策略。