This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Scheduler problem


In the tewothreads example program, if I don't use cyg_thread_delay() in the 'simple_program' thread, or if use cyg_thread_delay(0), the two threads cannt be scheduled normally. The result is only one thread can run, and another thread is hung.

thread program:
void simple_program(cyg_addrword_t data)
{
 int message = (int) data;
 int delay;

printf("Beginning execution; thread data is %d\n", message);

//cyg_thread_delay(200);

 for (;;) {
   //delay = 0+ (rand() % 0);

   /* note: printf() must be protected by a
      call to cyg_mutex_lock() */
   cyg_mutex_lock(&cliblock); {
     printf("Thread %d: and now a delay of %d clock ticks\n",
	     message, delay);
   }
   cyg_mutex_unlock(&cliblock);
   cyg_thread_delay(0);
 }
}
Output result:
Thread 0: and now a delay of 0 clock ticks
Thread 0: and now a delay of 0 clock ticks
Thread 0: and now a delay of 0 clock ticks
Thread 0: and now a delay of 0 clock ticks
...

So, in my ecos application which have many thread have follow program:
while (1)
{
...
}
If must I use cyg_thread_delay(delay) in it? ie:
while (1)
{
...
cyg_thread_delay(delay);
}


If I must use cyg_thread_delay() in these threads, the performance of ecos will be a bad thing.

_________________________________________________________________
享用世界上最大的电子邮件系统― MSN Hotmail。 http://www.hotmail.com



-- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]