sync: fix FreeBSD implementation of sync functions (#20483)

This commit is contained in:
Kim Shrier 2024-01-11 03:03:34 -07:00 committed by GitHub
parent 9109b23c76
commit 341e79fc63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 14 deletions

View File

@ -35,8 +35,8 @@ fn test_try_lock_mutex() {
try_fail := mx.try_lock()
assert try_fail == false
mx.unlock()
try_sucess := mx.try_lock()
assert try_sucess == true
mx.unlock() // you must unlock it, after try_lock sucess
try_success := mx.try_lock()
assert try_success == true
mx.unlock() // you must unlock it, after try_lock success
mx.destroy()
}

View File

@ -51,12 +51,12 @@ fn test_try_lock_rwmutex() {
mx.unlock()
// try_rlock will always sucess when mx unlocked,
// try_rlock will always succeed when mx unlocked,
// multiple try_rlock can apply to the same mx
try_sucess_reading2 := mx.try_rlock()
try_sucess_reading3 := mx.try_rlock()
assert try_sucess_reading2 == true
assert try_sucess_reading3 == true
try_success_reading2 := mx.try_rlock()
try_success_reading3 := mx.try_rlock()
assert try_success_reading2 == true
assert try_success_reading3 == true
// if mx is rlocked, then the try_wlock will fail
try_fail_writing2 := mx.try_wlock()
@ -65,10 +65,10 @@ fn test_try_lock_rwmutex() {
mx.runlock()
mx.runlock() // you must release rlock mutiple times, as it was rlocked multiple times
// after mx release all rlock, try_wlock will sucess
try_sucess_writing3 := mx.try_wlock()
assert try_sucess_writing3 == true
// after mx release all rlock, try_wlock will succeed
try_success_writing3 := mx.try_wlock()
assert try_success_writing3 == true
mx.unlock() // you must unlock it, after try_wlock sucess
mx.unlock() // you must unlock it, after try_wlock success
mx.destroy()
}

View File

@ -41,22 +41,25 @@ pub struct C.pthread_mutex {}
pub struct C.pthread_rwlock {}
pub struct C.pthread_rwlockattr {}
@[typedef]
pub struct C.pthread_rwlockattr_t {}
@[typedef]
pub struct C.sem_t {}
// [init_with=new_mutex] // TODO: implement support for this struct attribute, and disallow Mutex{} from outside the sync.new_mutex() function.
@[heap]
pub struct Mutex {
mutex &C.pthread_mutex = unsafe { nil }
}
@[heap]
pub struct RwMutex {
mutex &C.pthread_rwlock = unsafe { nil }
}
struct RwMutexAttr {
attr &C.pthread_rwlockattr = unsafe { nil }
attr C.pthread_rwlockattr_t
}
@[heap]