jmjgemini 发表于 2012-11-01 16:09

关于线程的问题,请指教!

本帖最后由 jmjgemini 于 2012-11-01 16:11 编辑

主线程输出1,新建一个线程输出2,用信号量让两个线程互相等待,但是不知道为什么结果就是会有的时候输出很多1,有的时候输出很多2~
才学这个,不是太懂:mrgreen:#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>

sem_t *sem_ptr1;
sem_t *sem_ptr2;


void *thread_function(void *arg);

int main()
{
        pthread_t my_thread;
        int res;
        sem_ptr1 = sem_open("sem_1",O_CREAT,S_IRUSR|S_IWUSR,0);
        sem_ptr2 = sem_open("sem_2",O_CREAT,S_IRUSR|S_IWUSR,1);
        if (sem_ptr1 == SEM_FAILED || sem_ptr2 ==SEM_FAILED)
        {
                perror("Semaphore initiqlization failed");
                exit(EXIT_FAILURE);
        }
        res = pthread_create(&my_thread,0,thread_function,0);
        if (res != 0)
        {
                perror("Can not open thread");
                exit(EXIT_FAILURE);
        }

        while(1)
        {
                sem_wait(sem_ptr2);
                write(STDOUT_FILENO,"1",1);
                sem_post(sem_ptr1);
        }
        sem_close(sem_ptr1);
        sem_close(sem_ptr2);
        sem_unlink("sem_1");
        sem_unlink("sem_2");

        exit(EXIT_SUCCESS);
}

void *thread_function(void *arg)
{

        while(1)
        {
                sem_wait(sem_ptr1);
                write(STDOUT_FILENO,"2",1);
                sem_post(sem_ptr2);
        }
}

linux_c_py_php 发表于 2012-11-01 19:13

楼主除了少了俩头文件以外, 代码毫无问题.

jmjgemini 发表于 2012-11-02 11:48

回复 2# linux_c_py_php


    请问具体呢?我在os x下编译也能通过啊

benney1981 发表于 2012-11-02 12:06

本来就是随机的啊

benney1981 发表于 2012-11-02 12:07

不过要模拟的比较像,需要在write(STDOUT_FILENO,"2",1);后面加sleep

zj47596731 发表于 2012-11-02 17:04

这个 好像就应该随机哦
页: [1]
查看完整版本: 关于线程的问题,请指教!