linux线程相关系统调用

    Java中有许多线程操作。其中最底层的操作必然不是java自己实现的,而是对线程相关的系统调用的包装。尤其是各native方法。

    接下来就探究一下Linux系统调用中,与线程相关的部分。

 

    线程状态:执行中,阻塞,就绪

一、Linux线程相关系统调用

大类

作用

方法签名

大类

作用

方法签名

线程

创建一个新线程,且马上执行

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

 

等待指定线程结束,并获得返回值

int pthread_join(pthread_t thread, void **value_ptr);

 

结束当前线程,并返回一个值

void pthread_exit(void *value_ptr);

 

想另一个线程发送cancel信号。如何回应信号,由被取消的线程决定。

int pthread_cancel(pthread_t thread);

信号量(保证操作原子性)

创建信号量

int sem_init (sem_t *__sem, int __pshared, unsigned int __value)

 

信号量+1,解除阻塞

int sem_post(sem_t *sem);

 

信号量-1,对值为0的信号量调用此方法将阻塞

int sem_wait(sem_t *sem);

 

信号量-1,对值为0的信号量调用此方法将返回错误

(上一个方法的非阻塞版本)

int sem_trywait(sem_t *sem);

 

销毁信号量

int sem_destroy(sem_t *sem);

互斥量

(信号量不光有0、1,还可以是别的数字;互斥量只能是lock和unlock两种状态)

创建互斥量

int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);

 

互斥量加锁,若已经加锁,则阻塞

int pthread_mutex_lock(pthread_mutex_t *mutex);

 

互斥量加锁,若已经加锁,则报错

(上一个方法的非阻塞版本)

int pthread_mutex_trylock(pthread_mutex_t *mutex);

 

互斥量解锁

int pthread_mutex_unlock(pthread_mutex_t *mutex);

 

销毁互斥量

int pthread_mutex_destroy(pthread_mutex_t *mutex);

你可能感兴趣的:(linux线程相关系统调用)