怎么才能得实现真正意义上的线程并发
[size=25px][/size]color=#FF0000]怎么才能得实现真正意义上的线程并发,在一个程序中有多个线程同时执行~[/color]
[解决办法]
多CPU咯
[解决办法]
楼主是不是想知道真正的多线程程序是什么样的,他们一般要有多少个并发的线程?
我觉得看你的具体应用了。
[解决办法]
真正意义上的线程并发,只有多个CPU才能实现,否则都是利用同一个CPU的分时处理来实现的伪并发,也就是说在某一时间点上,永远都是一个线程在执行,大概如
下图所示:
线程A --- ---
线程B -- ---
线程C --- ---
[解决办法]
如果是像搂住所言,那么这个并发机制不仅仅需要靠多处理器来完成,而且是对称多处理器。比如说现在市面上典型的双核处理器。
那么如果是多处理器的话,那么这两个并发线程将可能在两个不同的进程中执行,除非两个核处于同一个进程上下文环境中。
我下面将给出Blackfin561双核DSP处理器的演示,就是像楼主要看的运行结果:
P0: 3
3
3
3
3
1
P1: Breakpoint Hit at <ff6009f8>
P0: 1
P1: 2
P0: 1
P1: 2
P0: 1
P1: 2
P0: 1
P1: 2
P0: Breakpoint Hit at <ffa023ba>
上面,p0表示处理器0(即核A);p1表示处理器1(即核B)。在核B运行开始时会有一个断点。在程序运行结束后也有一个断点。
下面贴出源代码:
// core A#include <stdio.h>#define SICA_SYSCR *(volatile unsigned short*)0xffc00104#define SICB_SYSCR *(volatile unsigned short*)0xffc01104int main(int argc, const char* argv[]){ for(int i=0; i<5; i++) puts("3"); SICA_SYSCR &= ~0x20; // Enable core B for(int i=0; i<5; i++) puts("1"); return 0;}// core B#include <stdio.h>int main(int argc, const char* argv[]){ for(int i=0; i<5; i++) puts("2"); return 0;}
[解决办法]
不好意思。上面结果中,最后一个P1的“2”没有显示出来。因为在模拟环境下,当核A运行结束后核B也暂停执行了。所以我得把核A的断点去掉,让它处于idle状态,然后让核B继续运行。那么紧接在前面结果的下面,输出为:
P0: Breakpoint Hit at <ffa023ba>
P0: Breakpoint Hit at <ffa023ba>
P0: Breakpoint Hit at <ffa023ba>
P0: Breakpoint Hit at <ffa023ba>
P0: Breakpoint Hit at <ffa023ba>
P0: Breakpoint Hit at <ffa023ba>
P1: 2
P1: Breakpoint Hit at <ff601d4a>