一个进程中的线程一般使用lock和Monitor来进行同步。控制对临界资源的访问
对于2个进程可以用Mutex.1:我想问下,对于同一个程序,起多个进程,如果是操作同一个资源是不是也用Mutex来控制?2:还有个问题就是对数据库的操作。比如一个订票系统里,一般是在程序里控制同步还是在数据库中控制?在数据库中如何控制?3:比如一个用户报装系统,如何防止多个进程同时提交请求时分配的用户号相同?一般是在程序中对产生用户号的函数进行同步,还是在数据库中产生一个序列。用数据库产生的话如何实现同步?和第2个问题差不多。谢谢!

解决方案 »

  1.   

    1.用mutex,event,semaphore同步进程
    2.数据库操作用用事务,当然你要是在程序里控制业务逻辑也需要用到同步
    3.用数据库的话就是事物,我个人实现的话会在程序里做速度快
      

  2.   

    1:我想问下,对于起多个进程,如果是操作同一个资源是不是也用Mutex来控制?  
         yes
    2:还有个问题就是对数据库的操作。比如一个订票系统里,一般是在程序里控制同步还是在数据库中控制?在数据库中如何控制?  
         transaction
    3:比如一个用户报装系统,如何防止多个进程同时提交请求时分配的用户号相同?一般是在程序中对产生用户号的函数进行同步,还是在数据库中产生一个序列。
        在数据库中产生一个序列, use an atomic stored procedure to get an increased serial number.    
      

  3.   

    2楼的朋友
    2.数据库操作用用事务,当然你要是在程序里控制业务逻辑也需要用到同步 我看ORACLE里,比如我在updae一个数据,但没有commit,这个时这一行是被锁了的,而另一个用户此时是修改不了的。这个好象是数据库会自己控制把?
    如果我前,后台都不进行同步控制,好象有多个用户提交申请的时候也是只有1个回成功把!3.用数据库的话就是事物,我个人实现的话会在程序里做速度快。我想问下,比如我程序里一个函数产生用户号。程序是多线程的,而同时有会多个客户端运行这个进程。那么我是不是需要用lock和Mutex一起来进行线程以及进程的控制
      

  4.   

    我看ORACLE里,比如我在updae一个数据,但没有commit,这个时这一行是被锁了的,而另一个用户此时是修改不了的。这个好象是数据库会自己控制把? 
    如果我前,后台都不进行同步控制,好象有多个用户提交申请的时候也是只有1个回成功把! 
    =========================================================================
    你用ado.net操作oracle的时候,一条sql语句就是一个隐形事务,但是你如果有多条sql语句就需要在程序里开显示事务,或者写存储过程
    用lock就行了,但是你处理完序号以后需要同步会数据库中。之所以会在程序里控制序号,是因为序号不是简单的自增号,如果是简单的自增号利用数据库产生,效率高
      

  5.   

    是不是说如果单句SQL,我是可以不进行控制的,因为他一条sql语句就是一个隐形事务如果是多句SQL,就要ADO。NET中的用事物.如果我不使用ADO。NET中的事务,而是在存储过程中使用T-SQL,效果是不是一样的??
      

  6.   

    要么你在ado.net开事务,要么存储过程里写事务,效果一样