我在我的 macOS 内核扩展中使用同步 KPI 来验证一个功能是否在另一个功能启动之前完全执行(当然这两个功能都在不同的线程中执行)。
这些是同步方法:
msleep(void *channel,lck_mtx_t *mtx,int priority,const char *wmesg, struct timespec *timeout);
wakeup(void *channel);
channel
指向表示第一个函数的布尔值的指针也已完全执行。
这是我在第一个函数中的实现:
OSIncrementAtomic(channel);
wakeup(channel);
在我等待channel
设置的另一个功能上:
msleep(channel, NULL, 0, "", ts);
但是,如果第一个函数在第二个函数之前终止(这是常见的情况),我会等待超时ts
。
我的问题是是否有办法跳过已经发生msleep
的情况wakeup
?
谢谢,