多用户多进程互斥信号量的问题

问题描述

目前有两个进程A用户:a进程;asp.netv4.0(IIS用户):w3wp.exe进程这两个进程会同时访问数据库,所以利用CreateMutex创建一个互斥变量,为了适用多用户第三个参数加了Global\的变量,并且两个进程都提升了SE_CREATE_GLOBAL_NAME权限。目前的问题:如果先打开a进程,此时a进程首先创建互斥变量,再打开w3wp.exe进程,w3wp.exe进程进程访问不了该互斥变量。如果先打开w3wp.exe进程变量,此时w3wp.exe进程先创建互斥变量,再打开a进程,此时则一切正常,a进程能访问互斥变量。请问这是什么原因呢,有什么方法可以解决呢?

解决方案

解决方案二:
第一次听说web并发靠互斥变量来控制。你自己都说访问数据库了,那你应该去了解下数据库事务和锁
解决方案三:
goodjob
解决方案四:
拜托哪位大神在给我的建议吧....
解决方案五:
1楼已经是正确的建议了
解决方案六:
首先,正如#1楼所说,使用关系数据库的驱动来搞开发,不能不学习过关系数据库的事务。其次,就算是你的数据库没有事务,而你需要“控制”,你也应该仿照多用户数据库系统一样地,去设计一个服务系统,然后你的各种终端分别访问你的这个服务系统,而你的这个服务系统来访问数据库。这样也根本谈不上什么各种终端分别“互斥”的问题。第三,就算是你仍没有能力设计一个服务层,那么使用一个只有0个或者1个字节的文本文件就能实现“互斥锁”了,而且各种操作系统均兼容。不一定要使用特别的、麻烦的机制。当然你最应该考虑的,还是第一步。

时间: 2024-11-08 21:31:57

多用户多进程互斥信号量的问题的相关文章

Perl多进程与信号量

一.Perl多进程 今天这里就不多说什么是多进程.什么是多线程了,简单来说目的都是充分利用硬件资源,最大化机器性能. 任何语言的新手在遇到多进程编程时,心里往往会发怵,多进程好像很高大上.好复杂的样子,其实不然.我们要区分多进程实现本身和多进程应用编程,多进程本身的实现确实是很复杂的,但是我们更多的是集中在多进程应用编程,这部分就比较简单了. 话不多说,下面先看用perl实现的一个多进程编程例子. #!/bin/perl use strict; # fork returns the child

对System V命名信号量的封装类,用于进程/线程间互斥

最近为了对多进程互斥访问资源,采用System V的命名信号量,为了方便使用,对其用c++进行了封装,代码如下.AOSLock.hpp:#ifndef _AOSLOCK_HPP#define _AOSLOCK_HPP #include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>#include <stdio.h>#include <errno.h>#include <stdli

Linux下的多进程间共享资源的互斥访问

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> #include <pthread.h> pthread_mutex_t* g_mutex; //创建共享的mutex void init_mutex(void) { int ret; //g_mutex一定要是进程间可以共享的,否则无法

进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结

进程和程序: 进程:是个动态的概念,指的是一个静态的程序对某个数据集的一次运行活动,而程序是静态的概念,是由代码和数据组成的程序块而已. 进程5大特点:动态性,并发性,独立运行性,异步性,和结构化的特性. 在多道程序环境下,程序不能独立运行,操作系统所有的特征都是基于进程而体现的,只有进程可以在系统中运行,程序运行必须有进程才行.进程是操作系统里资源分配的基本单位,也是独立运行的基本单位,具有动态的特点,暂时出现的特点,而且一个进程产生之后,可以再次生成多个进程出来.也可以多个进程并发执行,也可

Linux 内核同步之自旋锁与信号量的异同【转】

转自:http://blog.csdn.net/liuxd3000/article/details/8567070 Linux 设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态,linux 提供了多种解决竞态问题的方式,这些方式适合不同的应用场景.   Linux 内核是多进程.多线程的操作系统,它提供了相当完整的内核同步方法.内核同步方法列表如下: 中断屏蔽 原子操作 自旋锁 读写自旋锁 顺序锁 信号量 读写信号量 BKL (大内核锁) Seq 锁 一.并发与竞态

锁-关于操作系统信号量的问题:Implementing S as a Binary

问题描述 关于操作系统信号量的问题:Implementing S as a Binary 1 //Implementing S as a Binary 2 //Data structures: 3 binary-semaphore S1, S2; 4 int C: 5 //Initialization: 6 S1 = 1 7 S2 = 0 8 C = initial value of counting semaphore S 9 10 //wait operation 11 S1=1, S2=0

进程管理2--进程的同步与信号量

进程同步 进程同步:指对多个相关进程在执行次序上进行协调: 同步的任务:使系统中各进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性: 系统中各进程之间在逻辑上的相互制约的关系: 直接关系-同步 间接关系-互斥 用来实现同步的机制称为同步机制.如: 软件和硬件的方法: 信号量机制: 管程机制 进程同步的基本概念 两种形式的制约关系 临界资源.临界区 同步机制应遵循的规则 信号量机制 整型信号量 记录型信号量 AND型信号量集.一般信号量集 信号量的应用 信号量实现进程互斥 信号量描

进程间通信之-信号量semaphore--linux内核剖析(十)

信号量 什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒. 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域. 临界区域是指执行数据更新的代码需要独占式地执行.而信号量就可以提供这样的一种访问机制,让一个临界区同一时

linux驱动开发--字符设备:信号量

信号量的使用 信号量(semaphore)是用于保护临界区的一种常用方法,它的使用和自旋锁类似.与自旋锁相同,只有得到信号量的进程才能执行临界区代码.但是与自旋锁不同的是当获取不到信号量时,进程不会原地打转而是进入休眠等待状态. 关于信号量的操作函数: 1.定义信号量 struct semaphore sem; 2.初始化信号量 sema_init(struct semaphore *sem, int val);//用于初始化信号量并设置sem为val init_MUTEX(struct sem