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

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

 2010-07-04 15:55:00 来源:WEB开发网   
核心提示:为了防止这类情况的发生,你需要使用非抢占式client/server机制或同步对象来处理,Symbian操作系统中的线程和进程(8),同步对象(mutex, semaphore, critical section)都是核心对象,可以通过句柄来访问,如果一个线程已具为mutex调用Wait(),但没有Signal(),他

为了防止这类情况的发生,你需要使用非抢占式client/server机制或同步对象来处理。同步对象(mutex, semaphore, critical section)都是核心对象,可以通过句柄来访问。他们会限制或直接锁住对多线程们所要访问的资源,这种资源形式被称为共享资源。

在任何时刻只能有一个线程对共享资源进行写操作,每个要访问资源的线程都应使用同步机制来管理资源。

同步操作一般有如下步骤:

1. Call Wait() of the synchronization object reserved for this 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(),则线程死亡时该互斥将被通知。

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

Tags:Symbian 操作系统 线程

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