除了建立執行緒的 thread_create()函數、獲取返回值的 thread_join()函數和釋放執行緒佔用資源的 thread_detach()函數,C11 還提供了另外用於執行緒控制的 5 個函數:
thrd_t thrd_current(void);
該函數返回其所線上程的執行緒標識。
int thrd_equal(thrd_t thr0,thrd_t thr1);
僅當兩個執行緒識別符號 thr0、thr1 分別參照了兩個不同執行緒時,返回 0。
int thrd_sleep(const struct timespec*duration,struct timespec*remaining);
使得正在呼叫的執行緒等待一段時間,等待時間由 duration 指定。僅當該函數收到喚醒的信號時,它才提前返回。在這種情況下,該函數將剩餘倒數時間保留在 remaining 參照的物件中,假設 remaining 不是一個空指標。指標 duration 和 remaining 不得指向同一個物件。
結構引數 timespec 有兩個成員,分別用於儲存秒和納秒:
time_t tv_sec; // 秒≥0
long tv_nsec; // 0 ≤納秒≤999 999 999
結構中成員的順序未被指定。在下面的例子中,除非通過信號來喚醒,否則正在呼叫的執行緒將等待至少 100 毫秒:
struct timespec duration = {0};
duration.tv_nsec = 100*1E6; // 1毫秒 = 1 000 000納秒
thrd_sleep(&duration,NULL); // 休眠100毫秒
如果倒計時完成,則 thrd_sleep()返回 0;如果執行緒函數由一個信號喚醒,即實現提前返回,則 thrd_sleep()返回 -1。其他負數返回值表示錯誤。
void thrd_yield(void);
該函數建議作業系統排程器中斷當前呼叫的執行緒,並將 CPU 時間分給另一個執行緒。
_Noreturn void thrd_exit(int result);
以 result 作為結果值結束正在呼叫執行緒。線上程中執行的所有函數都可以呼叫 thrd_exit()。該函數呼叫相當於線上程函數中執行語句 return result;。最後一個執行緒退出後,整個程式將正常退出,換句話說,它類似於呼叫具有引數 EXIT_SUCCESS 的函數 exit()。