WEB开发网
开发学院手机开发Symbian 开发 Symbian 操作系统中的线程和进程 阅读

Symbian 操作系统中的线程和进程

 2010-03-18 20:57:00 来源:WEB开发网   
核心提示:resource.2. Access the shared resource.3. Call Signal() of the synchronization object reserved for this resource.注意,当 kill线程时要小心点,Symbian 操作系统中的线程和进程(8),因为如果线程使
resource.

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

上一页  3 4 5 6 7 8 9 10  下一页

Tags:Symbian 操作系统 线程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接