结构
GLibStaticRecMutex
说明 [src]
struct GStaticRecMutex {
/* No available fields */
}
GStaticRecMutex
的工作原理类似于 GStaticMutex
,但它能被同一线程多次锁定。如果你进入它 n 次,则必须再次解锁它 n 次才能让其他线程锁定它。例外是函数 g_static_rec_mutex_unlock_full():它允许你完全解锁一个 GStaticRecMutex
,返回深度(即此互斥锁被锁定的次数)。深度稍后可用于通过调用 g_static_rec_mutex_lock_full() 恢复 GStaticRecMutex
的状态。在 GLib 2.32 中,GStaticRecMutex
已弃用,建议改用 GRecMutex
。
即使 GStaticRecMutex
不是不透明的,也应仅将其与以下函数一起使用。
即使尚未调用 g_thread_init()
,也可以使用所有 g_static_rec_mutex_* 函数。此时它们没有任何作用,除了 g_static_rec_mutex_trylock() 只会返回 TRUE
。
实例方法
g_static_rec_mutex_init
在使用 GStaticRecMutex
之前,必须使用此函数对其进行初始化。或者,你可以使用 G_STATIC_REC_MUTEX_INIT
进行初始化。
已弃用:2.32
g_static_rec_mutex_lock
锁定 mutex
。如果 mutex
已被其他线程锁定,当前线程将阻塞,直至 mutex
被其他线程解锁。如果 mutex
已被调用线程锁定,此函数将增加 mutex
的深度并立即返回。
已弃用:2.32
g_static_rec_mutex_trylock
尝试锁定 mutex
。如果 mutex
已被其他线程锁定,它将立即返回 FALSE
。否则它将锁定 mutex
并返回 TRUE
。如果 mutex
已被调用线程锁定,此函数将增加 mutex
的深度并立即返回 TRUE
。
已弃用:2.32
g_static_rec_mutex_unlock
解锁 mutex
。其他线程只有在 mutex
被解锁的次数已达先前被锁定的次数后才能锁定 mutex
。如果 mutex
已完全解锁,并且另一个线程在针对 mutex
的 g_static_rec_mutex_lock()
调用中被阻塞,则该线程将被唤醒并可以自身锁定 mutex
。
已弃用:2.32
g_static_rec_mutex_unlock_full
完全解锁 mutex
。如果另一个线程在 mutex
的 g_static_rec_mutex_lock()
调用中被阻止,将唤醒它,并且它可以锁定 mutex
本身。此函数返回当前线程已锁定 mutex
的次数。若要恢复调用 g_static_rec_mutex_unlock_full()
之前的状态,可以使用此函数返回的深度调用 g_static_rec_mutex_lock_full()
。
已弃用:2.32