Symbian 操作系统中的线程和进程
2010-03-18 20:57:00 来源:WEB开发网2. Access the shared resource.
3. Call Signal() of the synchronization object reserved for this resource.
注意,当 kill线程时要小心点。因为如果线程使用已具注销的对象,不同的同步对象其处理方式是不同的。因此,忽略使用同步类型而kill一个已具更新过部分资源的线程是会引发问题的。
2)使用Semaphores(信号)
Semaphores 可以管理共享资源的同步化访问。这里semaphore的句柄可通过RSemaphore类获得。
Semaphore限制了同一时刻访问共享资源的数目。semaphore计数的初始化工作可以放在构造函数中进行。
Semaphore可以是全局的也可以是局部的,全局的semaphore 有自己的名称,可以被其他进程搜索并使用。而局部的semaphore没有名称,只能在同一进程间的线程中使用。
调用semaphore的 Wait()方法将减少semaphore计数,而如果计数为负的话,调用线程就会进入等待状态。
调用semaphore的Signal()方法将增加semaphore计数,如果增长之前为负数,则等待信号的第一个线程将设定为准备运行状态。
调用semaphore的Signal(TInt aCount)和调用n次Signal()效果是一样的。
当线程死亡时,只有该线程正等待该信号时,信号才能被通知。因为信号在下面这样的情况也是可以执行的:在一个线程中调用Wait(),在另一个线程中调用Signal(),这样的信号无法在使用它的线程死亡时被通知。这样只会导致信号计数减低。
3)使用互斥(Mutex)
互斥主要使用在同步下独占访问共享资源。它的句柄可以通过RMutex类来获得。
和信号一样,互斥可以是全局也可以是局部的。唯一的不同在于其计数初始化时总为1。Mutex因此只允许最多一个访问共享资源。
如果一个线程已具为mutex调用Wait(),但没有Signal(),则线程死亡时该互斥将被通知。
4)使用临界区(Critical Sections)
Critical Sections可用来在一单独进程中独占访问共享资源。Critical Sections句柄可以通过RCriticalSection类来获得。
Critical Sections只能用在同一进程的线程间,通常它用来管理某段代码的访问,每次只能有一个线程来访问。
同一线程中,在调用Wait()前调用 Signale()将会引发线程的异常。但不会出现在其他类型的同步对象中。
线程的中断是不会影响critical sections的状态的,因此使用critical
更多精彩
赞助商链接