使用C++,编写一个在Linux上面运行的,封装了一个线程的类
时间: 2023-05-26 21:04:38 浏览: 115
以下是一个使用C语言编写的基本线程类的示例,可以在Linux上运行。
```c
#include <pthread.h>
class Thread {
public:
Thread();
virtual ~Thread();
void start();
void join();
protected:
virtual void* run() = 0;
private:
pthread_t thread_;
bool started_;
};
Thread::Thread()
: started_(false) {}
Thread::~Thread() {}
void Thread::start() {
if (started_) return;
started_ = true;
pthread_create(&thread_, NULL, Thread::thread_entry_func, this);
}
void Thread::join() {
if (!started_) return;
pthread_join(thread_, NULL);
}
void* Thread::thread_entry_func(void* arg) {
return ((Thread*) arg)->run();
}
```
这个线程类主要包括一个构造函数、一个析构函数以及三个公共成员函数:start()、join()和run()。
start()函数用来启动线程,具体实现使用pthread_create()函数。
join()函数用来等待线程的结束,具体实现使用pthread_join()函数。
run()函数是一个纯虚函数,需要子类实现,用来指定该线程执行的具体操作。
除此之外,还有一个私有的静态线程入口函数thread_entry_func(),它是在pthread_create()函数内部被调用,负责执行run()函数并返回结果。
使用这个基本的线程类,可以方便地创建和管理线程。例如,可以创建一个派生类来实现run()函数:
```c
class MyThread : public Thread {
protected:
void* run() {
// 线程具体实现代码
return NULL;
}
};
```
这样,在创建线程的时候只需要调用MyThread的start()方法即可:
```c
MyThread thread;
thread.start();
thread.join();
```
这个线程类只是一个基本的结构,可以使用它作为基础来构建更复杂的线程类和线程池。需要注意的是,在实现线程时,必须保证线程的安全性和可重入性,避免线程安全问题的出现。
阅读全文