int main(void) { init_func(); while (1) { loop_func(); } }
int main(void) { init_func(); /* Replace with your application code */ while (1) { loop_func(); } }
int main(void) { init_func(); while (1) { loop_func(); wait_milliseconds(500); } }
static long loop_func( int lvl ) { long n = 0; if( lvl == sync ) { down( &sema ); locked++; } if( 0 == lvl ) { const int tick = 1; msleep( tick ); // выполняемая работа потока n = 1; } else { int i; for( i = 0; i < rep; i++ ) { n += loop_func( lvl - 1 ); } } if( lvl == sync ) up( &sema ); return n; }
static int thread_func( void* data ) { long n = 0; struct param *parent = (struct param*)data; int num = parent->num - 1; // порядковый номер потока (локальный!) struct task_struct *t1 = NULL; struct param parm; printk( "! %s is running\n", st( num ) ); if( num > 0 ) { init_completion( &parm.finished ); parm.num = num; t1 = kthread_run( thread_func, (void*)&parm, IDENT, num ); } n = loop_func( max_level ); // рекурсивный вызов вложенных циклов if( t1 != NULL ) wait_for_completion( &parm.finished ); complete( &parent->finished ); printk( "! %s do %ld units\n", st( num ), n ); return 0; }
void check_fd(t_client *client) { if (FD_ISSET(client->s, &(client->fd_read))) { memset(client->by_serv, '\0', MAX_BUFF + 1); my_read(client->s, client->by_serv, MAX_BUFF); } if (FD_ISSET(1, &(client->fd_read))) loop_func(client); if (FD_ISSET(1, &(client->fd_write))) { if (client->by_serv != NULL) { my_printf(1, "%s\n", client->by_serv); free(client->by_serv); client->by_serv = NULL; } } if (FD_ISSET(client->s, &(client->fd_write))) loop_write(client); }