再次请教线程互斥的问题:关于文件和同步
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
意思是 他们保护的区域只允许同时有一个线程进入