An example of running multiple thread instances of the same function. Memory is being allocated dynamically.
Dependencies: Threads mbed-rtos mbed
main.cpp
- Committer:
- lemniskata
- Date:
- 2013-06-29
- Revision:
- 4:a25f2646a1bc
- Parent:
- 3:681b2f7e1b41
File content as of revision 4:a25f2646a1bc:
#include "mbed.h"
#include "Threads.h"
/*
Author: Ivan Shindev
Date: 06/29/2013
This program creates multiple thread instances of the same function
Each thread prints its number and terminates after 5 prints
A new thread of the same function is created only if less
than 5 threats are currently non-inactive
Mbed RTOS does not support multiple thread instances of the same function
with dynamic memory
Start the program and watch the miracle :)
*/
Serial pc(USBTX, USBRX);
osMutexId stdio_mutex;
osMutexDef(stdio_mutex);
void Do(void const *data) {
int i=(int)data;
int exec=0;
while(1)
{
osMutexWait(stdio_mutex, osWaitForever);
pc.printf("This is Thread #%d\n",i);
osMutexRelease(stdio_mutex);
exec++;
if(exec>=5) //end the thread after 10 executions
break;
wait(1);
}
}
int main() {
ThreadList* my_threads=NULL; //List of all Initialized threads
ThreadList* thread; //pointer to the last created ThreadList element
int max=5;
int i=1;
while(1)
{
//Initialize a thread.
//A new thread is created only if the list has free space or
// one of started threads has finishid
if(initThread(&my_threads,Do,&thread,max)==0)
{
// pc.printf("Thread creation failed. \n");
}
else
{
//Start the thread and store the id
thread->id=osThreadCreate(thread->thread,(void *) i);
i++;
}
wait(0.2);
}
}