我能不能把线程的写操作放在临界区中,而读操作不放在临界区中,用这样的方式实现一个read-write lock?
谢谢。

解决方案 »

  1.   

    请楼主想一下这种情况:
    线程A对List进行遍历处理
      for i:=0 to list.Count-1 do
      begin
        //处理list[i]
      end;线程B删除List中的元素。那么A就会访问被B删除的元素和释放的内存。
      

  2.   

    这我之前没有想到,看来用临界区来实现理论是可行的,不过要不同情况区别看待,比如读写一个Integer或string,应该是可行的,如果是读写一个容器,可能是会出大麻烦。谢谢zhouzuoji。
      

  3.   


    信号量貌似不能做read-write lock。
    如果用人工复位的事件再搭配一个能表现读取计数的变量貌似可以实现一个简单的read-write lock。不过还未仔细研究过。