Pthread

delims 于 2020-08-22 发布

pthread_t 是结构体指针,指向

    struct _opaque_pthread_t {
        long __sig;
        struct __darwin_pthread_handler_rec  *__cleanup_stack;
        char __opaque[__PTHREAD_SIZE__];
    };

macOS 下 pthread 使用方法


// 1. 创建线程: 定义一个pthread_t类型变量
pthread_t thread;
// 2. 开启线程: 执行任务
pthread_create(&thread, NULL, run, NULL);
// 3. 设置子线程的状态设置为 detached,该线程运行结束后会自动释放所有资源
// 默认创建的线程都是非分离的,非分离的线程执行完后不会释放资源,变成僵尸线程。
// 
pthread_detach(thread);
// 使用 pthread_join函数后,非分离线程可以在结束后释放资源。
pthread_join(thread,NULL); 

void * run(void *param)    // 新线程调用方法,里边为需要执行的任务
{
    NSLog(@"%@", [NSThread currentThread]);

    return NULL;
}


// pthread_mutex_t 
// 互斥锁,用来锁住临界区
使用方法

pthread_mutex_t mutex; //declaration a mutex
pthread_mutex_init(&mutex);// init the mutex
phtread_mutex_lock(&mutex);// lock critical section of code
pthread_mutex_unlock(&mutex); //unlock
pthread_mutex_destroy(&_mutex) // destroy the mutex
 
// pthread_cond_t 用法
// 条件变量,一个线程阻塞等待条件变量改变,另一个线程改变条件变量,通知另一个线程继续执行

pthread_cond_t  cond// decalaration condition
pthread_cond_init(&cond) // initialize the cond
按照上面的方法再创建一个mutex 
pthread_cond_wait(&cond,&mutex) // suspended and wait for condition 
pthread_cond_signal(&cond) // result in the thread continue where wait for condition
pthread_cond_destroy(&cond)  // destroy the condition


// sem_t 信号量

int sem_init(sem_t *sem, int pshared, unsigned int value); //初始化
int sem_wait(sem_t *sem);//阻塞线程,等待信号
int sem_trywait(sem_t *sem);//
int sem_post(sem_t * sem);//类似 signal
int sem_destroy(sem_t * sem);//销毁


pthread_rwlock_t rwlock; //读写锁,读读并发,写入独占
pthread_rwlock_init(&rwlock, NULL);//初始化读写锁
 
写模式:
pthread_rwlock_wrlock(&rwlock);     //加写锁
写写写……
pthread_rwlock_unlock(&rwlock);     //解锁  

读模式:
pthread_rwlock_rdlock(&rwlock);      //加读锁
读读读……
pthread_rwlock_unlock(&rwlock);     //解锁