帮我用c++写一个可以并发100个线程的带有启动,停止,暂停,恢复,安全快速线程类
时间: 2024-06-07 21:12:02 浏览: 69
C++ 实现 暂停、继续、停止线程的线程类 和 Demo
好的,以下是一个简单的C++线程类,可以启动、停止、暂停和恢复100个线程,并保证线程安全和快速执行:
```cpp
#include <thread>
#include <mutex>
#include <condition_variable>
class SafeFastThread {
public:
SafeFastThread() : m_stop(false), m_pause(false) {}
virtual ~SafeFastThread() {}
void start() {
m_stop = false;
m_pause = false;
for (int i = 0; i < 100; i++) {
m_threads.emplace_back(std::thread(&SafeFastThread::run, this));
}
}
void stop() {
m_stop = true;
m_pause = false;
m_cv.notify_all();
for (auto& t : m_threads) {
if (t.joinable()) {
t.join();
}
}
m_threads.clear();
}
void pause() {
std::unique_lock<std::mutex> lock(m_mutex);
m_pause = true;
}
void resume() {
std::unique_lock<std::mutex> lock(m_mutex);
m_pause = false;
m_cv.notify_all();
}
bool is_paused() const {
std::unique_lock<std::mutex> lock(m_mutex);
return m_pause;
}
bool is_running() const {
std::unique_lock<std::mutex> lock(m_mutex);
return !m_stop;
}
protected:
virtual void run() {
while (!m_stop) {
std::unique_lock<std::mutex> lock(m_mutex);
m_cv.wait(lock, [this]() { return !m_pause || m_stop; });
if (m_stop) {
break;
}
// do something here
}
}
private:
std::vector<std::thread> m_threads;
std::mutex m_mutex;
std::condition_variable m_cv;
bool m_stop;
bool m_pause;
};
```
这里使用了`std::thread`、`std::mutex`和`std::condition_variable`来实现线程的控制。`start()`函数启动100个线程,`stop()`函数停止所有线程,`pause()`函数暂停所有线程,`resume()`函数恢复所有暂停的线程。`is_paused()`和`is_running()`函数分别返回线程是否暂停和是否正在运行的状态。`run()`函数是线程的执行函数,可以在其中实现需要处理的逻辑,但需要注意线程安全问题。
阅读全文