Linux类中的线程创建与线程处理函数

本文主要在类中使用Linux线程相关函数。

#include 
 
  
//#include 
//#include 
#include 
#include 
 
  
#include
using namespace std;
class ThreadTest{
public:
    //构造函数
    ThreadTest()
    {
        //1.定义互斥量
        //pthread_mutex_t mutex;
        //2.初始化互斥量
        pthread_mutex_init(&s_mutex,NULL);
        //创建线程,使用pthread_create函数
        pthread_t thread;
        pthread_create(&thread,NULL,pthreadPro,(void*)this);
    }
    //主线程测试函数
    void Test()
    {
        cout<<"I am main thread!"< 
  
        sleep(2);
        //使用互斥量加锁
        pthread_mutex_lock(&s_mutex);
        //使用互斥量解锁
        cout<<"the staus now is "<<m_status< 
  
        pthread_mutex_unlock(&s_mutex);
    }
 
  
    static void* pthreadPro(void* pv)
    {
 
  
        while(true)
        {
            ThreadTest* pThreadTest=(ThreadTest*)pv;
 
  
            for(int i=0;i<10;i++)
            {
                //使用互斥量加锁
                pthread_mutex_lock(&s_mutex);
                pThreadTest->m_status=i;
                //使用互斥量解锁
                pthread_mutex_unlock(&s_mutex);
                cout<<"have renew the status once!"< 
  
                sleep(1);
 
  
            }
        }
    }
private:
    int m_status;
    static pthread_mutex_t s_mutex;
};
pthread_mutex_t ThreadTest::s_mutex;
int main()
{
    ThreadTest test;
    while(true)
    {
        test.Test();
    }
    return 0;
}
 小结:类中使用线程创建函数时,需要注意一下几点: 
  

1.要在类中使用线程处理函数,需要将线程处理函数声明成static的;

2.static成员函数中不能直接使用类的成员变量,可以在创建线程时将当前类的this指针作为参数传入线程创建函数,然后线程处理函数中通过传入的this指针使用类中的成员变量;

3.另外,同样需要加上互斥锁等工具保证线程同步;

你可能感兴趣的:(Linux类中的线程创建与线程处理函数)