![]() |
1
0
您似乎有一个经典的单写/多读队列。有几种同步策略包括 RW-lock 和 Circular Ring Buffers 由于缓存,拥有一个拷贝绝对是最好的策略。在现代架构中,队列条目将被读取到缓存中,例如。 L3 第一条线索。同一CPU上的后续线程将避免从RAM重新读取内存。队列入口的多个副本可能存在于跨越多个CPU的高速缓存中。 线程将在CPU上进行时间切片,以便一次只运行一个线程。当读取相同的数据时,线程不会像互斥锁那样在串行锁的意义上相互阻塞。 为每个线程制作多个副本是个坏主意。即使数据完全相同,副本也会使缓存过时。 堆栈不在线程之间共享。如果队列元素位于线程的本地堆栈上,则它是私有副本。如果通过指向主线程堆栈的指针访问队列元素,则只会出现一个副本。让一个线程访问另一个线程的堆栈通常是一个糟糕的主意,但是 race conditions 很可能。 |
![]() |
user3732361 · 读取大文件时如何选择块大小? 6 年前 |
![]() |
Sector · 将参数传递给自己的execv内核实现 6 年前 |
![]() |
Arka Pal · 关闭管道中未使用的端部 6 年前 |
![]() |
Nat · 释放malloc内存时程序停止工作 6 年前 |
![]() |
Mengfan Ma · 作者所说的操作系统中的目录结构是什么意思? 6 年前 |
![]() |
Mengfan Ma · 在何处执行磁盘调度 7 年前 |