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

互斥访问问题___急用

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

    本文导语:  各位朋友:     我最近写了一个多线程程序,其中每个线程都需要修改一个全局变量"struct entry item;"(由于本问题与struct entry的结构无关,所以没有给出struct entry的具体定义),这样就存在一个互斥访问的问题。...

各位朋友:
    我最近写了一个多线程程序,其中每个线程都需要修改一个全局变量"struct entry item;"(由于本问题与struct entry的结构无关,所以没有给出struct entry的具体定义),这样就存在一个互斥访问的问题。虽然在操作系统中学过相关的内容,但是从来没有实际运用过,我自己简单的设计了一个变量flag来表示"item是否已经被占用":flag为1表示item已经被占用,本线程不能访问,需要等待;flag为1表示item没有被占用,本线程可以访问。
    然后每个线程采用如下逻辑进行互斥访问:
    while (!flag)
    {
        flag = 1;
        //处理item,然后break,退出while循环
        ....
    }

    但是,这种方法显然存在问题:如果两个线程同时检查flag,那就有可能同时进入while循环当中。在书上看到有所谓的"TestandSet"元操作,即在此元操作中可以检查flag的值,如果flag为0,就将其置为1。但是我不知道linux系统中是否提供了这样的系统调用,所以请各位高手指点一二(也可以给我推荐一些其他的方法),小弟不胜感激!!!!!!!!

|
如果你不对整个链表做增删操作,在链表里搜索某个表项的操作无需加锁。在你的每个struct里增加一个mutex变量。找到表项以后,把这个表项的锁锁住,修改完后解锁,这样就可以同时修改多个表项。
如果同时还要对整个链表做增删操作,则必须有一个锁对整个链表做保护。为了提高效率,可以根据你的应用的实际情况用读写锁。

|
man pthread_rwlock_rdlock

|
用 pthread_mutex_t mutex来实现,具体使用请查资料

|
pthread_mutex_init(&mutex,NULL);  
pthread_mutex_lock(&mutex); 
//处理item,然后break,退出while循环
pthread_mutex_unlock(&mutex);

|
用读写锁。

|
典型的读者-写者问题,前几天我刚作了一个类似的程序,不过
是在 windows 上用两个信号量和一个计数器实现的,在 linux
上我还没做过,fierygnu(va_list) 说的pthread_rwlock_rdlock 
应该是可用的,自己学习一下就行

|
flag为1表示item已经被占用,本线程不能访问,需要等待;flag为1表示item没有被占用,本线程可以访问。?????
应该是:flag为1表示item已经被占用,本线程不能访问,需要等待;flag为0表示item没有被占用,本线程可以访问。

|
up

|
赞同楼上的观点,

|
赞同hmaple(hmaple) 的观点

|
hmaple(hmaple) 乖乖,好

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c++的boost库多线程(Thread)编程(线程操作,互斥体mutex,条件变量)详解
  • 互斥锁的一个问题
  • 在下面这段代码中,如果对init方法只加synchronized关键字,则不能达到互斥的目的,还要再加上static关键字才能互斥,为什么?
  • wince程序防止创建多个实例实现互斥作用
  • 信号量和互斥锁有什么区别??
  • linux进程同步或互斥
  • 进程对串口读写时使用互斥机制吗?
  • 在linux下,如何进行“互斥”和“并发”的控制?
  • 条件变量和互斥量区别
  • 信号量可以用于多进程多线程同时互斥不?
  • 多线程调用ioctl 应在哪进行互斥操作?
  • 关于用文件实现进程互斥的问题
  • 问个多线程网络服务程序的文件操作符的互斥问题
  • 请教POSIX问题:一个进程中,可以有多个互斥锁麽?
  • 条件变量是不是一定要搭配互斥锁才能发挥作用?
  • 线程同步读取变量可不可以不用互斥锁
  • 用户态能否实现信号量机制,来提供线程间互斥和同步的功能?
  • linux/unix里的进程互斥问题 ,有关lockf()函数!
  • 关于内核互斥体的问题
  • 互斥锁和信号量,能不能实现先阻塞先唤醒,顺序获取互斥锁和信号量
  • 信号量互斥问题


  • 站内导航:


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

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

    浙ICP备11055608号-3