Ubuntu下用信号量模拟的十字路口,可以在qt中实现吗,求大神解决以下是代码

sn.c南北方向
#include

#include
#include

#include
#include

#include
#include
#include

int sem_id;
void init(){
key_t key;int ret;
unsigned short sem_array[2];
union semun
{
int val;
struct semid_ds *buf;
unsigned short *array;
}arg;
key=ftok(".",'s');
sem_id=semget(key,2,IPC_CREAT|0644);
sem_array[0]=1;
sem_array[1]=0;

arg.array = sem_array;
ret = semctl(sem_id, 0, SETALL, arg);

if (ret == -1)
printf("SETALL failed (%d)\n", errno);

}
void del()
{
semctl(sem_id,IPC_RMID,0);
}
int car_num()
{
int ret;
srand(time(NULL));
ret=rand()%20;
return ret;
}
int main(int argc,char *argv[])
{
init();

struct sembuf sops[2];
sops[0].sem_num = 0;

sops[0].sem_op = -1;
sops[0].sem_flg = SEM_UNDO;

sops[1].sem_num = 1;

sops[1].sem_op = 1;

sops[1].sem_flg =SEM_UNDO;
printf("this is south north\n");
int remaining=0;
while(1)
{
int carnum=car_num();
carnum+=remaining;
printf("car num is %d\n",carnum);

    semop(sem_id,(struct sembuf *)&sops[0],1);  
    printf("now south north running......\n");

            int n=30;
            remaining=carnum;
            for(remaining;n>0;remaining--)
            {
              sleep(1);
              n-=3;
            }
    semop(sem_id,(struct sembuf *)&sops[1],1);  
    printf("run after \n");

            if(remaining<0)
                {
                    remaining=0;
                }
            printf("car num is %d\n",remaining);
    sleep(15);
}
del();

}
we.c东西方向
#include

#include
#include

#include
#include

#include
#include

int sem_id;
int car_num()
{
int ret;
srand(time(NULL));
ret=rand()%20;
return ret;
}

void init(){
key_t key;int ret;
key=ftok(".",'s');
sem_id=semget(key,2,IPC_CREAT|0644);
}
int main(int argc,char *argv[])
{
init();
int remaining;
struct sembuf sops[2];
sops[0].sem_num = 0;

sops[0].sem_op = 1;
sops[0].sem_flg = SEM_UNDO;

sops[1].sem_num = 1;

sops[1].sem_op = -1;

sops[1].sem_flg =SEM_UNDO;

printf("this is west east\n");
while(1)
{
int carnum=car_num();

    carnum+=remaining;
    printf("car num is %d\n",carnum);


    semop(sem_id,(struct sembuf *)&sops[1],1);  
    printf("now east west  running......\n");

    int n=30;
    remaining=carnum;
    for(remaining;n>0;remaining--)
           {
                sleep(1);
                n-=3;
           }

    semop(sem_id,(struct sembuf *)&sops[0],1);  
    printf("run after\n");

    if(remaining<0)
        {
              remaining=0;
        }
    printf("car num is %d\n",remaining);
    sleep(15);
}

}

http://www.pudn.com/downloads653/sourcecode/unix_linux/detail2656247.html

http://download.csdn.net/detail/xiongmao_bailongmao/3353826