我正在用WinSock2和WinAPI函數寫一個聊天。我有一點麻煩。
我將客戶端連接的std :: vector存儲在服務器上。當新客戶端連接時,新線程啓動,並且所有與客戶端一起工作都在這個新線程中完成。我不使用類(我知道它不是很好),所以這個連接列表被定義爲全局變量。
在我看來,它可能是多個線程同時嘗試訪問此列表的情況。雖然我還沒有注意到,有與任何問題,我需要做這樣的事情:關鍵部分 - 是或不是?
template
class SharedVector {
std::vector vect;
CRITICAL_SECTION cs;
SharedVector(const SharedVector& rhs) {}
public:
SharedVector();
explicit SharedVector(const CRITICAL_SECTION& CS);
void PushBack(const T& value);
void PopBack();
unsigned int size();
T& operator[](int index);
virtual ~SharedVector();
};
template
SharedVector::SharedVector() {
InitializeCriticalSection(&cs);
}
template
SharedVector::SharedVector(const CRITICAL_SECTION& r): cs(r) {
InitializeCriticalSection(&cs);
}
template
void SharedVector::PushBack(const T& value) {
EnterCriticalSection(&cs);
vect.push_back(value);
LeaveCriticalSection(&cs);
}
template
void SharedVector::PopBack() {
EnterCriticalSection(&cs);
vect.pop_back();
LeaveCriticalSection(&cs);
}
因此,沒有使用CRITICAL_SECTION我的情況需要和我只是幸運的人誰沒有找到一個錯誤?