首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

再次请问线程互斥的有关问题:关于文件和同步

2012-02-21 
再次请教线程互斥的问题:关于文件和同步1、打开读写文件需要互斥,但查找文件、判断文件是否存在FileExists()

再次请教线程互斥的问题:关于文件和同步
1、打开读写文件需要互斥,但查找文件、判断文件是否存在
FileExists()、删除文件是否需要互斥呢?
2、传入线程内的参数是否需要同步呢?
如:

      __fastcall   TMyThread::TMyThread(   short   spara,   bool   CreateSuspended   )
                :   TThread(   true   )
    {
          FreeOnTerminate   =   true;
          sPara=   spara;     //   sPara是线程内的变量
      }

这样在线程内的其他函数内使用sPara是否也需要使用TCriticalSection互斥呢?

3、在同一进程内保护同一个变量、参数、文件读写等是否都需要定义一个
TCriticalSection类型的变量来保护呢?也就是说保护一个变量就需要定义
一个TCriticalSection类型的变量?

谢谢

[解决办法]
1,不需要
2,传入线程的参数需要同步,那要看你什么需求了。
3,不需要,定义一个就可以了。
[解决办法]
第二个,只要保证只有一个线程会操作到sPara的话就不用互斥。 比如说这个sPara里你线程类的private变量就不用。如果是public的,你要保证其它线程如主线程不会去操作这个变量(不过象short,int之类的变量读是没关系的)。如果是static的话,那最好还是加上互斥。

第三个,都可以,随便你,看这些变量的使用情况。TCriticalSection类型作用是一个线程调用Enter以后其它线程再调用Enter就会 "卡住 "等到之前调用Enter的那个线程Leave后才会返回。理解了就可以自由使用了
[解决办法]
删除文件是否需要互斥呢?
> > 应该需要吧, 如果另一个线程在访问呢 那不出错
[解决办法]
3、在同一进程内保护同一个变量、参数、文件读写等是否都需要定义一个
TCriticalSection类型的变量来保护呢?也就是说保护一个变量就需要定义
一个TCriticalSection类型的变量?

> > 不需要

TCriticalSection-> Enter


//
和TCriticalSection-> Leave

意思是 他们保护的区域只允许同时有一个线程进入

热点排行