读写锁 优先级 linux,Linux下pthread的读写锁的优先级问题

#include

#include

#include

#include

?

static pthread_barrier_t barr;

static pthread_barrier_t barr2;

static pthread_rwlock_t rwlock;

?

void * thr1_entry(void *arg){

int threadCount=*(int*)arg;

std::cout<

?

if(pthread_rwlock_rdlock(&rwlock)!=0)

return NULL;

std::cout<

{int rc=pthread_barrier_wait(&barr);

if(rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) {

printf("Could not wait on barrier\n");

}}

?

std::cout<

?

int rc=pthread_barrier_wait(&barr2);

if(rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) {

printf("Could not wait on barrier\n");

}

?

std::cout<

}

?

?

void * thr2_entry(void *arg){

int threadCount=*(int*)arg;

std::cout<

if(threadCount!=1){int rc=pthread_barrier_wait(&barr);

if(rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) {

printf("Could not wait on barrier\n");

}}

?

if(threadCount==1){

if(pthread_rwlock_rdlock(&rwlock)!=0)

return NULL;

std::cout<

{int rc=pthread_barrier_wait(&barr);

if(rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) {

printf("Could not wait on barrier\n");

}}

?

} else if(threadCount==2){

pthread_rwlock_wrlock(&rwlock);

} else if(threadCount==3){

while(true){

sleep(5);

pthread_rwlock_rdlock(&rwlock);

std::cout<

pthread_rwlock_unlock(&rwlock);

std::cout<

}

}

std::cout<

?

int rc=pthread_barrier_wait(&barr2);

if(rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) {

printf("Could not wait on barrier\n");

}

?

std::cout<

}

?

?

?

int main(int argc,char* argv[]){

pthread_t thr1,thr2,thr3;

if(pthread_barrier_init(&barr, NULL, 3)) {

printf("Could not create a barrier\n");

return -1;

}

?

if(pthread_barrier_init(&barr2, NULL, 3)) {

printf("Could not create a barrier\n");

return -1;

}

pthread_rwlockattr_t attr;

if(pthread_rwlockattr_init(&attr)){

printf("Could not create a rwlock attr\n");

return -1;

}

// int perf=-1;

//pthread_rwlockattr_getkind_np(&attr,&perf);

// std::cout<

pthread_rwlockattr_setkind_np(&attr,PTHREAD_RWLOCK_PREFER_WRITER_NP);

if(pthread_rwlock_init(&rwlock,&attr)){

printf("Could not create a rwlock\n");

return -1;

}

int threadCount[]={1,2,3};

if(pthread_create(&thr1, NULL, &thr1_entry, (void*)&threadCount[0])) {

printf("Could not create thread %d\n", threadCount);

return -1;

}

?

if(pthread_create(&thr2, NULL, &thr2_entry, (void*)&threadCount[1])) {

printf("Could not create thread %d\n", threadCount);

return -1;

}

?

if(pthread_create(&thr3, NULL, &thr2_entry, (void*)&threadCount[2])) {

printf("Could not create thread %d\n", threadCount);

return -1;

}

pthread_join(thr1,NULL);

pthread_join(thr2,NULL);

pthread_join(thr3,NULL);

pthread_barrier_destroy(&barr);

pthread_rwlock_destroy(&rwlock);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值