关于线程的问题,请指教!
本帖最后由 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);
}
}
楼主除了少了俩头文件以外, 代码毫无问题. 回复 2# linux_c_py_php
请问具体呢?我在os x下编译也能通过啊 本来就是随机的啊 不过要模拟的比较像,需要在write(STDOUT_FILENO,"2",1);后面加sleep 这个 好像就应该随机哦
页:
[1]