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

View File

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