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

Unix进程互斥

    来源: 互联网  发布时间:2016-03-06

    本文导语:  多个进程会同时操作一张oracle表,CURSOR打开失败,所以想做一下进程之间的互斥, 执行表操作函数前lock一下,操作完后unlock,如果已经有lock则阻塞等待到解锁后执行表操作。 如何实现。谢谢。 | 进程...

多个进程会同时操作一张oracle表,CURSOR打开失败,所以想做一下进程之间的互斥,
执行表操作函数前lock一下,操作完后unlock,如果已经有lock则阻塞等待到解锁后执行表操作。
如何实现。谢谢。

|
进程间互斥一般都用信号量。下边是一段用信号量互斥下多进程使用共享内存的例子。楼主可以参考一下。

//client.c
#include 
#include 
#include 

#define SEGSIZE 1024
#define READTIME 1
union semun {
 int val;
 struct semid_ds *buf;
 unsigned short *array;
} arg;

// 打印程序执行时间
void out_time(void)
{
 static long start = 0;
 time_t tm;
 if (0 == start){
  tm = time(NULL);
  start = (long)tm;
  printf(" now start ...n");
 }
 printf(" second: %ld n",(long)(time(NULL)) - start);
}

//创建信号量
int new_sem(key_t key)
{
 union semun sem;
 int semid;
 sem.val = 0;
 semid = semget(key,0,0);
 if (-1 ==  semid){
  printf("create semaphore errorn");
  exit(-1);
 }
 return semid;
}

//等待信号量变成0
void wait_p(int semid)
{
 struct sembuf sops={0,-1,0};
 semop(semid,&sops,1);
}

void wait_v(int semid)
{
struct sembuf sops={0,+1,0};
semop(semid,&sops,1);
}
int main(void)
{
 key_t key;
 int shmid,semid;
 char *shm;
 char msg[100];
 int i;

 key = ftok("/root/arm/test",0);
 shmid = shmget(key,SEGSIZE,0);

 if(-1 == shmid){
  printf(" create shared memory errorn");
  return -1;
 }
 shm = (char *)shmat(shmid,0,0);
 if (-1 == (int)shm){
  printf(" attach shared memory errorn");
  return -1;
 }
 semid = new_sem(key);
 wait_p(semid);
 for (i = 0;i f_lock, NULL) != 0) {
            free(fp);
            return(NULL);
        }
        /* ... continue initialization ... */
    }
    return(fp);
}

void
foo_hold(struct foo *fp) /* add a reference to the object */
{
    pthread_mutex_lock(&fp->f_lock);
    fp->f_count++;
    pthread_mutex_unlock(&fp->f_lock);
}

void
foo_rele(struct foo *fp) /* release a reference to the object */
{
    pthread_mutex_lock(&fp->f_lock);
    if (--fp->f_count == 0) { /* last reference */
        pthread_mutex_unlock(&fp->f_lock);
        pthread_mutex_destroy(&fp->f_lock);
        free(fp);
    } else {
        pthread_mutex_unlock(&fp->f_lock);
    }
}


    
 
 

您可能感兴趣的文章:

  • 请问Unix下的进程互斥是用什么实现的?
  • linux/unix里的进程互斥问题 ,有关lockf()函数!
  • Unix下共享内存一个写N个读的进程同步与互斥
  • 如何AIX UNIX 主机在进程中通过C编程获取进程名
  • unix进程问题,为什么关了控制界面进程结束了
  • 小妹请教各位大哥,在unix下,如何显示进程,和kill掉进程?
  • unix下用进程名杀进程 报错
  • 用Delphi或VC怎么向unix发送命令来检测进程甚至能够控制进程?
  • unix中有关父进程和子进程的问题
  • 在unix下,后台trf001同时并发了很多进程,请用一条命令,杀掉所有trf001并发的进程
  • 在unix下做webserver,使用多进程?多线程?
  • 发一个关于UNIX进程的帖子
  • unix下异步进程的问题
  • 求救!!!Tru64 Unix如何列出及kill掉后台进程?
  • 在UNIX下怎么做一个判断一个进程是否关闭?
  • Unix 进程 自动 终止的原因
  • Unix下进程间通信有那些比较常用的方法,谁有经验?高分奉送!
  • 请问WINDOWS 和LINUX/UNIX 的进程、线程的区别
  • UNIX进程包括那三个部分?
  • unix 进程杀不掉怎么办?
  • unix 进程状态问题
  • 大讨论:UNIX里“进程通信”和“流”的概念!!!
  • unix的进程pooling是如何实现的
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • unix/Linux下c++ boost thread库读写锁介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • 没有unix系统我如何学习unix
  • php将unix时间戳转换成字符串时间函数(date)
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • UNIX特急!!!digital unix问题,请专家快来!!!
  • UNIX支持中文否,请推荐UNIX好书
  • SCO UNIX 5.0用软盘启动之后无法启动UNIX
  • 散分!!unix 用户调查!!!你使用哪款unix
  • hp unix 和 sco unix的区别
  • 入门问题,我想向UNIX编程方向发展,单目前不会UNIX,我该如何做
  • 强烈建议将linux/Unix栏目放到“软件开发者”大类里面来。----Unix开发的人助威支持!!!
  • 现在那些unix比较流行?Linux和 Unix有 什么区别?
  • 小问题, Unix 如何建立一个文件 ,unix 文件有后缀名吗
  • 我想学习Unix,请高手给个下载网址,用linux来学习Unix差别大吗?
  • 请问各位unix大虾,哪有免费的unix下载?


  • 站内导航:


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

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

    浙ICP备11055608号-3