请用C++设计一个线程安全的消息序号发生器类,消息序号采用 int型变量。
时间: 2024-03-11 16:51:27 浏览: 14
好的,以下是使用 C++ 设计的线程安全的消息序号发生器类的代码实现:
```cpp
#include <mutex>
class ThreadSafeMessageSequenceGenerator {
public:
ThreadSafeMessageSequenceGenerator() : sequence(0) {} // 构造函数,初始化序号为 0
int getNextSequence() { // 获取下一个序号的函数
std::lock_guard<std::mutex> lock(mutex); // 加锁
return sequence++;
}
private:
int sequence; // 消息序号变量
std::mutex mutex; // 互斥量,用于实现线程安全
};
```
在上面的代码中,我们在 MessageSequenceGenerator 类的基础上增加了一个互斥量 mutex,用于保证 getNextSequence() 函数的线程安全性。在 getNextSequence() 函数内部,我们使用 std::lock_guard<std::mutex> 对互斥量进行加锁,以保证同一时间只有一个线程访问 sequence 变量。
我们可以使用这个类来生成一系列的消息序号,每次调用 getNextSequence() 函数时,会返回一个不同的 int 型的序号,从 0 开始递增,保证线程安全。以下是使用示例:
```cpp
ThreadSafeMessageSequenceGenerator generator; // 创建一个线程安全的消息序号发生器对象
for (int i = 0; i < 10; i++) {
int sequence = generator.getNextSequence(); // 获取下一个序号
cout << "Message sequence: " << sequence << endl; // 输出序号
}
```
在上面的示例代码中,我们创建了一个名为 generator 的 ThreadSafeMessageSequenceGenerator 对象,并使用 for 循环调用 getNextSequence() 函数获取 10 个序号并输出,保证线程安全。