有没有什么机制可以不经过内核就可以唤醒另一个进程中的线程?等待线程可能会在一个循环中旋转,没问题(每个线程都与一个单独的核心 Hook ),但在我的情况下,发送线程必须很快,并且不能通过内核来唤醒等待线程.
最佳答案
否,如果另一个线程正在休眠(不在 CPU 上)。要唤醒此类线程,您需要通过调用作为内核一部分的调度程序将其状态更改为“RUNNING”。
是的,如果两个线程或进程运行在不同的 CPU 上,并且它们之间存在共享内存,则可以同步两个线程或进程。您应该将所有线程绑定(bind)到不同的 CPU。然后你可以使用自旋锁:pthread_spin_lock
和 pthread_spin_unlock
来自 POSIX 的 Pthread 可选部分的函数 ('(ADVANCED REALTIME THREADS)'
; [THR SPI]
);或任何自定义自旋锁。自定义自旋锁很可能会使用一些原子操作和/或内存屏障。
发送线程会改变内存中的值,由接收线程循环检查。
例如
初始化:
pthread_spinlock_t lock;
pthread_spin_lock(&lock); // close the "mutex"
然后启动线程。
等待线程:
{
pthread_spin_lock(&lock); // wait for event;
work();
}
主线程:
{
do_smth();
pthread_spin_unlock(&lock); // open the mutex; other thread will see this change
// in ~150 CPU ticks (checked on Pentium4 and Intel Core2 single socket systems);
// time of the operation itself is of the same order; didn't measure it.
continue_work();
}
关于linux - 在没有内核支持的情况下唤醒一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236693/