gpt4 book ai didi

linux - 在没有内核支持的情况下唤醒一个线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:27 25 4
gpt4 key购买 nike

有没有什么机制可以不经过内核就可以唤醒另一个进程中的线程?等待线程可能会在一个循环中旋转,没问题(每个线程都与一个单独的核心 Hook ),但在我的情况下,发送线程必须很快,并且不能通过内核来唤醒等待线程.

最佳答案

否,如果另一个线程正在休眠(不在 CPU 上)。要唤醒此类线程,您需要通过调用作为内核一部分的调度程序将其状态更改为“RUNNING”。

是的,如果两个线程或进程运行在不同的 CPU 上,并且它们之间存在共享内存,则可以同步两个线程或进程。您应该将所有线程绑定(bind)到不同的 CPU。然后你可以使用自旋锁:pthread_spin_lockpthread_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com