linux线程相关系统调用

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

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

 

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

一、Linux线程相关系统调用

大类

作用

方法签名

大类

作用

方法签名

线程

<pthread.h>

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

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);

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

<semaphore.h>

创建信号量

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);

互斥量

<pthread.h>

(信号量不光有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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值