C语言 用定时器 模拟多线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 用定时器 模拟多线程相关的知识,希望对你有一定的参考价值。

TC并不直接支持多线程。事实上,dos下只能模拟多线程。
听书可以用一个定时器完成调度问题。

请问什么是定时器,怎么实现呢?
能不能给点提示,或代码

参考技术A 定时器,就是延时.我看看我以前编的还在不?要是在的话,我就给你发上去..

用C语言如何实现多线程同时运行的情况下,各个线程输出不同的随机数?

我用系统时间作为种子,发现因为各个线程之间运行的时间差太小,所以产生的随机数还是相同的。网上有种方法可以用微秒级的时间作种子,但我没看懂,不知道谁能帮忙解释下不?或者有其他方法也欢迎提出。不过在srand前让线程sleep的方法就不需要了,因为我这里的情况要求线程之间要同时运行。

1、使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,设一个bool变量flag共享,然后beep的时候设为false,beep完设成true。fun()里面每次看一下这个flag,是false的话就不做动作等下一秒,基本可以满足需求。

2、例程:

#include <pthread.h>
#include <stdio.h>
#include <sys/time.h>
#include <string.h>
#define MAX 10
pthread_t thread[2];
pthread_mutex_t mut;
int number=0, i;
void *thread1()

printf ("thread1 : I'm thread 1\\n");
for (i = 0; i < MAX; i++)

printf("thread1 : number = %d\\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(2);

printf("thread1 :主函数在等我完成任务吗?\\n");
pthread_exit(NULL);

void *thread2()

printf("thread2 : I'm thread 2\\n");
for (i = 0; i < MAX; i++)

printf("thread2 : number = %d\\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(3);

printf("thread2 :主函数在等我完成任务吗?\\n");
pthread_exit(NULL);

void thread_create(void)

int temp;
memset(&thread, 0, sizeof(thread)); //comment1
/*创建线程*/
if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2
printf("线程1创建失败!\\n");
else
printf("线程1被创建\\n");
if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3
printf("线程2创建失败");
else
printf("线程2被创建\\n");

void thread_wait(void)

/*等待线程结束*/
if(thread[0] !=0)  //comment4
pthread_join(thread[0],NULL);
printf("线程1已经结束\\n");

if(thread[1] !=0)  //comment5
pthread_join(thread[1],NULL);
printf("线程2已经结束\\n");


int main()

/*用默认属性初始化互斥锁*/
pthread_mutex_init(&mut,NULL);
printf("我是主函数哦,我正在创建线程,呵呵\\n");
thread_create();
printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\\n");
thread_wait();
return 0;

参考技术A 你用 (系统时间 - 线程 id*10) 作种子 就可以了。
种子变了,随机数系列就会变。
或 一个线程种子用 srand(1234); 另一个用 srand(4321); ...
加 系统时间 目的是 每次跑程序 随机数系列不同,更符合“随机”。本回答被提问者采纳

以上是关于C语言 用定时器 模拟多线程的主要内容,如果未能解决你的问题,请参考以下文章

C++ 多线程学习笔记:读者-写者问题模拟

linux C语言 TCP 多线程 简易聊天室

高手进,关于C语言在windows上建立多线程的问题(VC6.0上实现)

计时器与多线程(无聊应试向)

NodeJs多线程、多进程、定时任务

定时任务多线程的实现