2.2.4. 在多线程应用程序中管理锁

线程安全函数使用锁保护共享资源,以防止对其进行并发访问。 在 RVCT 2.2 和更高版本中,可以重新实现一些函数以便能够管理锁定机制,从而防止共享数据(如堆)损坏。 这些函数具有以下原型:

_mutex_initialize()

接受一个指向 32 位字的指针,并将其初始化为有效的互斥锁。

int _mutex_initialize(mutex *m);

缺省情况下,_mutex_initialize() 为非线程应用程序返回零。 因此,在多线程应用程序中,_mutex_initialize() 必须在成功时返回非零值,以使库在运行时知道它正在多线程环境中使用。

_mutex_acquire()

导致调用线程在提供的互斥锁上获得锁定。

void _mutex_acquire(mutex *m);

如果互斥锁没有所有者,_mutex_acquire() 则会立即返回。 如果互斥锁当前归另一个线程所有,_mutex_acquire() 必须将其阻止,直至互斥锁变为可用。

_mutex_release()

这导致调用线程释放提供的互斥锁。

void _mutex_release(mutex *m);

_mutex_release() 假定互斥锁归调用线程所有。

对于 C 库,互斥锁被指定为可放在任何位置的单个 32 位内存字。 但是,如果互斥锁实现需要比 32 位内存字更多的空间,或者要求互斥锁位于特殊内存区域中,则必须将缺省互斥锁视为指向真实互斥锁的指针。

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0349AC
Non-Confidential