在iphone上等效的信号量减少

时间:2011-10-25 16:41:16

标签: iphone multithreading semaphore

我找到了以下信号量示例。我目前正在学习线程同步。我几乎没有问题。

1)如果信号量的值为零,我调用semaphore_down是信号量值现在是-1还是semaphore_down只是检查该值是否大于零然后阻塞?

2)我正在为IOS编码,并且没有可用的semaphore_down功能。什么是平等?它与semaphore_wait相同吗?

我想让一个生产者线程永远运行,等待它不需要生成和唤醒它没有阻塞其他线程时。

这似乎是我需要的,但欢迎提出建议。

 void reader_function(void);
    void writer_function(void);
    char buffer;
    Semaphore writers_turn;
    Semaphore readers_turn;
    main()
    {
    pthread_t reader;
    semaphore_init( &readers_turn );
    semaphore_init( &writers_turn );
    /* writer must go first */
    semaphore_down( &readers_turn );
    pthread_create( &reader, pthread_attr_default,
    (void *)&reader_function, NULL);
    writer_function();
    }
    void writer_function(void)
    {
    while(1)
    {
    semaphore_down( &writers_turn );
    buffer = make_new_item();
    semaphore_up( &readers_turn );
    }
    }
    void reader_function(void)
    {
    while(1)
    {
    semaphore_down( &readers_turn );
    consume_item( buffer );
    semaphore_up( &writers_turn );
    }
    }

1 个答案:

答案 0 :(得分:0)

如果你试图等待一个值为0的信号量,它将永远不会消极 - 它将一直阻塞,直到另一个线程发送到信号量增加它,此时你的线程将被唤醒并减少它

您使用的是哪个信号量库?信号量对象通常仅支持两个操作: post wait ,还可选择初始化和取消初始化方法。因此,根据名称,您的semaphore_wait semaphore_down相同,但如果没有看到您的信号量库的文档,就无法说出来。

iOS也有POSIX semaphores,您可以使用它。