tsem_wait

This commit is contained in:
factosea 2024-05-14 16:52:53 +08:00
parent 889751e16f
commit 3c39f76365
2 changed files with 12 additions and 18 deletions

View File

@ -249,17 +249,12 @@ int tsem_destroy(tsem_t* sem) {
int32_t tsem_wait(tsem_t* sem) {
taosThreadMutexLock(&sem->mutex);
while (sem->count <= 0) {
struct timespec timeout;
clock_gettime(CLOCK_MONOTONIC, &timeout);
timeout.tv_sec += 9;
while (sem->count <= 0) {
int ret = taosThreadCondTimedWait(&sem->cond, &sem->mutex, &timeout);
if (ret == ETIMEDOUT) {
continue;
} else {
return ret;
}
int ret = taosThreadCondWait(&sem->cond, &sem->mutex);
if (0 == ret) {
continue;
} else {
taosThreadMutexUnlock(&sem->mutex);
return ret;
}
}
sem->count--;

View File

@ -49,12 +49,12 @@ TEST(osSemaphoreTests, Destroy) {
}
// skip, tsem_wait can not stopped, will block test.
TEST(osSemaphoreTests, Wait) {
tsem_t sem;
tsem_init(&sem, 0, 0);
ASSERT_EQ(tsem_wait(&sem), -1);
tsem_destroy(&sem);
}
// TEST(osSemaphoreTests, Wait) {
// tsem_t sem;
// tsem_init(&sem, 0, 0);
// ASSERT_EQ(tsem_wait(&sem), -1);
// tsem_destroy(&sem);
// }
TEST(osSemaphoreTests, WaitTime0) {
tsem_t sem;
@ -71,7 +71,6 @@ TEST(osSemaphoreTests, WaitTime1) {
tsem_destroy(&sem);
}
TEST(osSemaphoreTests, WaitAndPost) {
tsem_t sem;
int result = tsem_init(&sem, 0, 0);