- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在努力实现以下目标:
强制新创建的线程在 pthread_create()
之后立即开始运行。没有使用实时调度。
Unless real-time scheduling policies are being employed, after a call to pthread_create(), it is indeterminate which thread—the caller or the new thread—will next execute.
这当然是有道理的。因此,我想通过使用 pthread_yield()
我会强制新创建的线程接管并作为结果启动。但事实并非如此。
我只能在 pthread_create()
之后通过 sleep 来达到预期的结果。但我不想依赖这个解决方案 atm。
pthread_yield()
实现我的目标?相关文章:
谢谢!
最佳答案
如果您在多核系统上,那么您的新线程可能被安排在与创建它的线程不同的核心上。调用 pthread_yield()
可能不会产生预期的效果,因为它可能只会影响调用者核心的调度,而不影响任何其他核心。效果通常是将线程放在可运行队列的末尾。 (还值得注意的是,pthread_yield()
不是标准系统调用,因此没有关于其预期行为的标准引用。)
如果休眠时间不为零,调用 sleep()
可能会产生不同的结果。线程实际上是放在一个定时器唤醒队列中的,必须在定时器超时后移回可运行队列。这将更有可能在创建线程唤醒之前运行不同内核上的新线程。
如果一个新线程的优先级高于创建它的线程,它将抢占创建线程。
正如评论中所建议的那样,可以通过让创建线程有条件地等待来自新创建线程的信号来实现可预测的行为。
关于C 强制线程在 pthread_create 之后立即启动。 pthread_create 之后的 pthread_yield?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34859627/
我有三个函数 A、B、C,我想将它们用于线程。我想运行它们进行一定数量的迭代,并希望在每次迭代时在它们之间切换。我在使用 pthread_yield() 时对它们的执行顺序有疑问 下面是这些函数的代码
我正在用 C 语言实现一个线程库,但我对 pthread_yield() 的含义深信不疑。我在 man page 上查过了在终端,但我并不真正理解解释。谁能给我解释一下? 最佳答案 请注意,尽管它的名
我正在努力实现以下目标: 强制新创建的线程在 pthread_create() 之后立即开始运行。没有使用实时调度。 来自pthread_create() man page : Unless real
我在 CentOS7 中使用 gcc 编译此代码 main.c: #include void* mystart(void* arg) { pthread_yield(); retur
我在 CentOS7 中用 gcc 编译这段代码 main.c: #include void* mystart(void* arg) { pthread_yield(); retur
我花了很长时间寻找有关 time.h::sleep() 和 pthread.h::pthread_yield() 之间差异的信息,但找不到任何可靠的引用资料,所以我发布了这个问题。 time.h::s
我是一名优秀的程序员,十分优秀!