我正在使用 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 吗?我只是没有发现错误的幸运儿吗?