当前位置:  技术问答>linux和unix

Linux的pthread的读写锁是否可以写优先?

    来源: 互联网  发布时间:2015-06-01

    本文导语:  发现一个现象: (1)thread1中pthread_rwlock_rdlock(&a)成功后; (2)thread2中pthread_rwlock_wrlock(&a)不成功; (3)thread3中再次pthread_rwlock_rdlock(&a)又成功。 我希望第三步中的pthread_rwlock_rdlock(&a)不成功,怎么办? 望高手指教,...

发现一个现象:
(1)thread1中pthread_rwlock_rdlock(&a)成功后;
(2)thread2中pthread_rwlock_wrlock(&a)不成功;
(3)thread3中再次pthread_rwlock_rdlock(&a)又成功。
我希望第三步中的pthread_rwlock_rdlock(&a)不成功,怎么办?
望高手指教,谢谢!

|
默认就是写优先的,再检查一下你的代码。

#define _XOPEN_SOURCE 500

#include 

# define PTHREAD_RWLOCK_INITIALIZER_READ_PREF   { {0, 0}, 0, NULL, NULL, NULL,                    PTHREAD_RWLOCK_PREFER_READER_NP, PTHREAD_PROCESS_PRIVATE }

static pthread_rwlock_t a = PTHREAD_RWLOCK_INITIALIZER;

void *route_3 (void *p)
{
        sleep(2);
        printf("locking 3 = %dn", pthread_rwlock_rdlock(&a));
        pause();
        return NULL;
}

void *route_2 (void *p)
{
        sleep(1);
        printf("locking 2 = %dn", pthread_rwlock_wrlock(&a));
        pause();
        return NULL;
}

void *route_1 (void *p)
{
        printf("locking 1 = %dn", pthread_rwlock_rdlock(&a));
        pause();
        return NULL;
}

main()
{
        pthread_t t1, t2, t3;
        pthread_create(&t1, NULL, route_1, NULL);
        pthread_create(&t2, NULL, route_2, NULL);
        pthread_create(&t3, NULL, route_3, NULL);
        pthread_join(t1, NULL);
        pthread_join(t2, NULL);
        pthread_join(t3, NULL);
}

这个例子如果把a初始化成PTHREAD_RWLOCK_INITIALIZER_READ_PREF ,才是读优先的,你可以试一下,如果不对,就只有怀疑线程库看源码了。

    
 
 

您可能感兴趣的文章:

  • unix/Linux下c++ boost thread库读写锁介绍
  • linux 下能否读写.dbf 或者.xls格式的文件,怎样读写?高手指点,拜谢!!!
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • 串口读写,双方同时读写控制问题(linux内核)。
  • linux多线程无法进行阻塞方式的读写操作
  • linux下读写硬件
  • 有谁知道,Linux下文件的读写原理是怎样的?急
  • 一台linux机子上的程序要读写另外一台linux机子上的文件,该怎么做呢?
  • 如何在内核模块中对linux字符驱动进行读写呢
  • linux环境下SD卡如何读写
  • linux下面configlib库的读写问题
  • 哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 在linux下有没有想windows下vc一样读写ini 配置文件的库或函数
  • 怎么使用 linux 下的 libxml2 库读写 xml 文件和设置属性
  • 有关linux下读写串口的问题,在线等待!
  • 怎样将linux系统底下一个文件夹的只读属性改为可读写的属性?
  • 急求 linux下串口同时进行读写问题解决方法
  • Linux 中对文件的读写的问题
  • Linux内核中文件进行读写操作的问题
  • linux下是通过什么方式读写硬盘的?
  • 在linux中,如何读写usb端口数据
  • linux下运行pthread库出错的问题
  • LINUX关于pthread_create 和pthread_join
  • linux 函数返回值很奇怪 pthread_getspecific(key)
  • Linux里的pthread_create会不会阻塞啊?
  • Linux的线程库pthread是否有"亲缘性"的概念?
  • linux下进程和线程的区别(fork(),pthread_create())?
  • linux 开发时pthread不支持resume和suspend?
  • 请问:linux下如何将一个类的指针作为参数传给pthread_create创建的线程?
  • Linux pthread_cond_timewait 无法阻塞,请大侠快来指点。
  • 跪求:linux下pthread 双线程计算和单线程的运行时间完全相同是为什么?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • unix与linux的关系,是否免费?两者是否开放源码?各到什么版本?何处下载?
  • 怎么知道自己的redhat linux 的端口是否已经开放,比如我想看看80和21端口是否开放?
  • 请问用jb7编写的程序是否可以超平台,即在win下写的程序是否可以在linux下运行?
  • 有谁做过嵌入式 Linux开发?是否有嵌入式Linux的JVM?
  • SUSE Linux Enterprise Desktop 10.1是否可以象一般的Linux免费使用?
  • Linux对其在硬盘中的安装位置是否有要求?
  • 是否有精简版的linux.
  • 求判断某ip是否联通的函数或类linux c/c++
  • linux程序如何判断一个网络共享文件是否更新
  • Linux是否支持RTF格式
  • powerbuilder 是否能在 Linux系统下使用?
  • linux下的c++如何判断线程是否结束?
  • Linux对其在硬盘中的安装位置是否有要求? iis7站长之家
  • LINUX7.3是否支持INTEL 845G自带的显卡
  • oracle for linux 是否免费?
  • Linux是否不支持LCD ?
  • Linux 下是否可用用 ATL 宏 USES_CONVERSION ?
  • linux下如何测试是否能连接https://fep.veritrans.co.jp:443
  • linux查看cpu是否支持64位的方法
  • 在LINUX下,是否能访问WINDOWS的NTFS分区中的文件?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3