美文网首页
用OC写一个A、B、C接口的多线程(B接口输出结果后再执行C接口

用OC写一个A、B、C接口的多线程(B接口输出结果后再执行C接口

作者: YimG | 来源:发表于2023-04-05 09:46 被阅读0次

    // 定义信号量

    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    

    // 定义线程执行的任务

    void taskA(void *param) {
        // 任务A的具体操作
        // ...
    }
    
    void taskB(void *param) {
        // 任务B的具体操作
        // ...
        dispatch_semaphore_signal(sema); // 发送信号量
    }
    
    void taskC(void *param) {
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); // 等待信号量
        // 任务C的具体操作
        // ...
    }
    

    // 创建多线程函数

    void createThreads() {
        // 创建线程A
        dispatch_queue_t queueA = dispatch_queue_create("com.example.threadA", DISPATCH_QUEUE_CONCURRENT);
        dispatch_async(queueA, ^{
            taskA(NULL);
        });
        
        // 创建线程B
        dispatch_queue_t queueB = dispatch_queue_create("com.example.threadB", DISPATCH_QUEUE_CONCURRENT);
        dispatch_async(queueB, ^{
            taskB(NULL);
        });
        
        // 创建线程C
        dispatch_queue_t queueC = dispatch_queue_create("com.example.threadC", DISPATCH_QUEUE_CONCURRENT);
        dispatch_async(queueC, ^{
            taskC(NULL);
        });
    }
    

    // 主函数入口

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // 创建多线程
            createThreads();
            
            // 主线程的操作
            // ...
        }
        return 0;
    }
    

    在以上示例代码中,我们在 taskB 函数中使用 dispatch_semaphore_signal 函数来发送一个信号量,表示B接口已经执行完毕;而在 taskC 函数中则使用 dispatch_semaphore_wait 函数来等待这个信号量,表示要等待B接口执行完毕后再执行C接口。这样就可以确保C接口在B接口执行完毕后再开始执行。

    需要注意的是,在使用信号量的时候需要确保正确地初始化和释放信号量,避免出现死锁等问题。同时,对于复杂的多线程场景,我们还需要考虑如何优化线程的调度和资源管理,以提高算法的性能和效率。

    相关文章

      网友评论

          本文标题:用OC写一个A、B、C接口的多线程(B接口输出结果后再执行C接口

          本文链接:https://www.haomeiwen.com/subject/jieeddtx.html