pthread_t 是结构体指针,指向
struct _opaque_pthread_t {
long __sig;
struct __darwin_pthread_handler_rec *__cleanup_stack;
char __opaque[__PTHREAD_SIZE__];
};
- 函数名就是函数地址。
- 线程私有数据(Thread-specific Data,或TSD)
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); //解锁