小例子快速了解线程的使用

本文提供了一个C语言实现的例子,创建并管理四个线程:媒体线程以1秒间隔运行,智能线程每2秒运行,告警线程每5秒运行,日志线程每10秒运行。主控线程监听用户输入,根据a、b、c、d控制对应线程的启停。线程通过共享标志变量实现同步。
摘要由CSDN通过智能技术生成

本期分享的小练习如下:
创建一个媒体线程,线程启动时打印"MediaThread start",然后间隔1s打印"MediaThread running…"
创建一个智能线程,线程启动时打印"SmartThread start",然后间隔2s打印"SmartThread running…"
创建一个告警线程,线程启动时打印"AlarmThread start",然后间隔5s打印"AlarmThread running…"
创建一个日志线程,线程启动时打印"LogThread start",然后间隔10s打印"LogThread running…"
创建一个主控线程,线程负责接收’a’ ‘b’ ‘c’ ‘d’字符
如果接收到’a’,媒体线程如果正在打印则停止打印
媒体线程如果停止打印则继续打印
如果接收到’b’,智能线程如果正在打印则停止打印
智能线程如果停止打印则继续打印
如果接收到’c’,告警线程如果正在打印则停止打印
告警线程如果停止打印则继续打印
如果接收到’d’,日志线程如果正在打印则停止打印
日志线程如果停止打印则继续打印

以下附上解决这个问题的源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>

int flag1 = 0;	//四个功能标志
int flag2 = 0;
int flag3 = 0;
int flag4 = 0;
void *MediaThread(void *arg)
{
	char *p = arg;
	while (1)
	{
		if (0 == *p)
		{
			break;
		}
		sleep(1);
		printf("MediaThread running...1s\n");
	}
	return NULL;
}
void *SmartThread(void *arg)
{
	char *p = arg;
	while (1)
	{
		if (0 == *p)
		{
			break;
		}
		sleep(2);
		printf("SmartThread running...2s\n");
	}
	return NULL;
}
void *AlarmThread(void *arg)
{
	char *p = arg;
	while (1)
	{
		if (0 == *p)
		{
			break;
		}
		sleep(5);
		printf("AlarmThread running...5s\n");
	}
	return NULL;
}
void *LogThread(void *arg)
{
	char *p = arg;
	while (1)
	{
		if (0 == *p)
		{
			break;
		}
		sleep(10);
		printf("LogThread running...10s\n");
	}
	return NULL;
}
int main(int argc, const char *argv[])
{
	pthread_t tid[4];
	int i = 0;
	char mode = -1;			//模式选择变量

	while (1)
	{
		mode = getchar();	//从终端接收模式
		if ('a' == mode)
		{
			flag1 = !flag1;	//更改功能标志,1执行,0退出
			if (1 == flag1)
			{
				pthread_create(&tid[0], NULL, MediaThread, &flag1);		//创建线程并将功能标志传入
			}
			else if (0 == flag1)			//标志为0时,线程结束并且进程中回收线程空间
			{
				pthread_join(tid[0], NULL);
			}
		}
		else if ('b' == mode)
		{
			flag2 = !flag2;
			if (1 == flag2)
			{
				pthread_create(&tid[1], NULL, SmartThread, &flag2);
			}
			else if (0 == flag2)
			{
				pthread_join(tid[1], NULL);
			}
		}
		else if ('c' == mode)
		{
			flag3 = !flag3;
			if (1 == flag3)
			{
				pthread_create(&tid[2], NULL, AlarmThread, &flag3);
			}
			else if (0 == flag3)
			{
				pthread_join(tid[2], NULL);
			}
		}
		else if ('d' == mode)
		{
			flag4 = !flag4;
			if (1 == flag4)
			{
				pthread_create(&tid[3], NULL, LogThread, &flag4);
			}
			else if (0 == flag4)
			{
				pthread_join(tid[3], NULL);
			}
		}
		else if ('q' == mode)
		{
			exit(0);
		}
		//		pthread_create(&tid[i], NULL, p[i], &mode);
	}
	return 0;
}

本期的分享就到这里结束啦!欢迎小伙伴们私信留言哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值