我是新来的Objective-C并发处理人员。我已经看过一些并发编程的演示代码。如何在2个不同的线程中按顺序打印自然数Objective-C
我想按顺序打印自然数,但在2个不同的线程。像:
1
:螺纹XX
2
:螺纹YY
3
:螺纹XX
4
:螺纹YY
5
:螺纹XX
6
:螺纹YY.....................
................ .....
等等。但我无法弄清楚如何做到这一点。任何帮助?
我是新来的Objective-C并发处理人员。我已经看过一些并发编程的演示代码。如何在2个不同的线程中按顺序打印自然数Objective-C
我想按顺序打印自然数,但在2个不同的线程。像:
1
:螺纹XX
2
:螺纹YY
3
:螺纹XX
4
:螺纹YY
5
:螺纹XX
6
:螺纹YY.....................
................ .....
等等。但我无法弄清楚如何做到这一点。任何帮助?
我们可以告诉你如何做到这一点,但这不是一个非常有用的场景。你将花费大量的时间用信号量或类似的东西来协调这两个线程,这在很大程度上降低了在多线程上运行的东西的价值。通常,在编写多线程代码时,您希望通过最大限度地减少等待某个其他线程的某些信号所花费的时间来最大限度地提高并发性。这种在这两个线程之间交替的尝试与我们的多线程编程的一般意图是对立的。
话虽如此,它可能看起来有点像:
dispatch_queue_t xx = dispatch_queue_create("xx", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t yy = dispatch_queue_create("yy", DISPATCH_QUEUE_SERIAL);
dispatch_semaphore_t semaphoreXX = dispatch_semaphore_create(0);
dispatch_semaphore_t semaphoreYY = dispatch_semaphore_create(1); // seed this with one extra signal from YY
NSInteger __block value = 0;
dispatch_async(xx, ^{
for (NSInteger i = 0; i < 100; i++) {
dispatch_semaphore_wait(semaphoreYY, DISPATCH_TIME_FOREVER); // wait for signal from YY
value += 1;
NSLog(@"%ld: xx", (long)value);
[NSThread sleepForTimeInterval:0.1]; // 1/10 second delay so we can see what's going on
dispatch_semaphore_signal(semaphoreXX); // send signal from XX
}
});
dispatch_async(yy, ^{
for (NSInteger i = 0; i < 100; i++) {
dispatch_semaphore_wait(semaphoreXX, DISPATCH_TIME_FOREVER); // wait for signal from XX
value += 1;
NSLog(@"%ld: yy", (long)value);
[NSThread sleepForTimeInterval:0.5]; // 1/2 second delay so we can see what's going on
dispatch_semaphore_signal(semaphoreYY); // send signal from YY
}
});
通常,当我们要更新多线程一个变量,我们希望我们的那个对象同步访问,但这种“有线程交替“的逻辑消除了我们在这种特殊情况下的需要。
好的。我明白你的意思。而且我意识到这不是并发性的实际使用,因为它会导致开销问题。但正如我所说,我对并发的范围很陌生。所以我想了解基础知识。我没有偏好,无论是派遣队列还是操作队列,任何人都会做@Rob – nayem