IOday7作业

用信号量的方式实现倒置线程打印线程顺序执行。

IOday7作业_第1张图片

#include 
#include 
#include 
#include 
#include 
#include 
#include 
char str[10] = "123456789";
sem_t sem1;
sem_t sem2;
pthread_mutex_t mutek;

void *callback(void *arg)
{
	while (1)
	{
		
		
		sem_wait(&sem2);
		int i = 0, j = strlen(str) - 1;

		while (i < j)
		{
			str[i] = str[i] + str[j];
			str[j] = str[i] - str[j];
			str[i] = str[i] - str[j];
			i++;
			j--;
		}
		sem_post(&sem1);

	}

	pthread_exit(NULL);
}
void *callback2(void *arg)
{
	pthread_t pth = *(pthread_t *)arg;
	printf("%ld\n", pth);
	while (1)
	{
		
		printf("%s\n",str);
		sem_post(&sem2);
		sem_wait(&sem1);
	}
}
int main(int argc, const char *argv[])
{

	pthread_t pth;
	pthread_t pth1;
	sem_t sem;

	sem_init(&sem, 0, 0);
	sem_init(&sem1, 0, 0);
	sem_init(&sem2, 0, 0);
	pthread_mutex_init(&mutek,NULL);
	pthread_create(&pth, NULL, callback, &sem);
	pthread_create(&pth1, NULL, callback2, &sem);
	pthread_join(pth1, NULL);

	return 0;
}

2.

#include 
#include 
#include 
#include
#include
#include
#include
#include
pthread_mutex_t mutex;
pthread_cond_t cond;
int fd_r;
off_t size;
char buf=0;
int flag=0;
void *callread(void *arg)
{

	for(int i=0;i

IOday7作业_第2张图片

 

3.

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
pthread_mutex_t mutex;
pthread_cond_t cond;
int flag=0;
void *callback1(void *arg)
{
    while(1)
    {
        pthread_mutex_lock(&mutex);
        if(0!=flag)
        {
            pthread_cond_wait(&cond,&mutex);
        }
        printf("a");
        flag=1;
        pthread_cond_signal(&cond);
        pthread_mutex_unlock(&mutex);
    }
    pthread_exit(NULL);
}
void *callback2(void *arg)
{
    while(1)
    {
        pthread_mutex_lock(&mutex);
        if(0!=flag)
        {
            pthread_cond_wait(&cond,&mutex);
        }
        printf("b");
        flag=2;
        pthread_cond_signal(&cond);
        pthread_mutex_unlock(&mutex);
    }
    pthread_exit(NULL);
}
void *callback3(void *arg)
{
    while(1)
    {
        pthread_mutex_lock(&mutex);
        if(1!=flag)
        {
            pthread_cond_wait(&cond,&mutex);
        }
        printf("c\n");
        flag=0;
        pthread_cond_signal(&cond);
        pthread_mutex_unlock(&mutex);
    }
    pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
    pthread_t pth_a, pth_b, pth_c;
    pthread_mutex_init(&mutex, NULL);
    pthread_cond_init(&cond, NULL);
    pthread_create(&pth_a, NULL, callback1, NULL);
    pthread_create(&pth_b, NULL, callback2, NULL);
    pthread_create(&pth_c, NULL, callback3, NULL);
    pthread_join(pth_c,NULL);
    return 0;
}

 

你可能感兴趣的:(c语言)