block并行编程与线程同步

本文探讨了如何使用Block进行并行编程,并利用信号量实现线程同步。通过确保每个Block按顺序执行,待所有Block完成后,通过Group通知执行后续代码,可以灵活选择wait或notify来控制线程的阻塞状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

block可用于并行编程,线程同步多用信号量来实现,保证执行完一个block再执行下一个block,当所有block都执行完毕后,再利用group,通知执行后面的代码,使用wait(阻塞线程),或notify(不阻塞线程)等待执行结束后再继续。



#import <UIKit/UIKit.h>
#import "AppDelegate.h"

static volatile BOOL flag = NO;
//一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
static const int Length = 1000000000;
static int Data[Length];
static void initData() {
    for (int i = 0; i < Length; i++) {
        Data[i] = i+1;
    }
}

#define Test_Mode 7

int main(int argc, char * argv[]) {
    @autoreleasepool {
#if Test_Mode == 0
        //local block
        void (^myBlock) (void) = ^(void){
            NSLog(@"I am a block");
        };
        myBlock = ^{
            NSLog(@"I have been changed");
        };
        myBlock();
#elif Test_Mode == 1
        //array block
        void (^blockArray[2])(void) = {
            ^{
                NSLog(@"block 1");
            },
            ^{
                NSLog(@"block 2");
            },
        };
        blockArray[0]();
        blockArray[1]();
        //block该如何修改外部变量呢?有两
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值