#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <time.h>
struct snail_thread{
int move;
char snail_name[ 10 ] ;
char owner[ 10 ] ;
} ;
int sum = 0 ;
void printval( void * ptr) {
struct snail_thread * data;
data = ( struct snail_thread * ) ptr;
while ( sum < 100 ) {
sum += data-> move;
printf ( "%s moves %d mm, total: %d\n " , data
-> snail_name
, data
-> move
, sum
) ; }
pthread_exit( 0 ) ;
}
int main( void ) {
pthread_t t[ 6 ] ;
struct snail_thread s[ 6 ] ;
int i;
for ( i = 0 ; i < 6 ; i++ )
s
[ i
] .
move = rand ( ) % ( ( 5 + 1 ) - 1 ) + 1 ;
strcpy ( s
[ 0 ] .
snail_name , "Snail A" ) ;
strcpy ( s
[ 1 ] .
snail_name , "Snail B" ) ;
strcpy ( s
[ 2 ] .
snail_name , "Snail C" ) ;
strcpy ( s
[ 3 ] .
snail_name , "Snail D" ) ;
strcpy ( s
[ 4 ] .
snail_name , "Snail E" ) ;
strcpy ( s
[ 5 ] .
snail_name , "Snail F" ) ;
for ( i = 0 ; i < 6 ; i++ )
pthread_create( & t[ i] , NULL, ( void * ) & printval, ( void * ) & s[ i] ) ;
for ( i = 0 ; i < 6 ; i++ )
pthread_join( t[ i] , NULL) ;
return ( 0 ) ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHB0aHJlYWQuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCnN0cnVjdCBzbmFpbF90aHJlYWR7CglpbnQgbW92ZTsKCWNoYXIgc25haWxfbmFtZVsxMF07CgljaGFyIG93bmVyWzEwXTsKfTsKCmludCBzdW0gPSAwOwoKdm9pZCBwcmludHZhbCh2b2lkICpwdHIpIHsKCXN0cnVjdCBzbmFpbF90aHJlYWQgKmRhdGE7CglkYXRhID0gKHN0cnVjdCBzbmFpbF90aHJlYWQgKikgcHRyOwoKCXdoaWxlKHN1bSA8IDEwMCkgewoJCXN1bSArPSBkYXRhLT5tb3ZlOwoJCXByaW50ZigiJXMgbW92ZXMgJWQgbW0sIHRvdGFsOiAlZFxuIixkYXRhLT5zbmFpbF9uYW1lLCBkYXRhLT5tb3ZlLCBzdW0pOwoJfQoKCXB0aHJlYWRfZXhpdCgwKTsKfQoKaW50IG1haW4odm9pZCkgewoJcHRocmVhZF90IHRbNl07CglzdHJ1Y3Qgc25haWxfdGhyZWFkIHNbNl07CglpbnQgaTsKCglzcmFuZCh0aW1lKE5VTEwpKTsKCglmb3IoaSA9IDA7IGkgPCA2OyBpKyspCgkJc1tpXS5tb3ZlID0gcmFuZCgpICUgKCg1ICsgMSkgLSAxKSArIDE7CgoJc3RyY3B5KHNbMF0uc25haWxfbmFtZSwgIlNuYWlsIEEiKTsKCXN0cmNweShzWzBdLm93bmVyLCAiSm9uIik7CgoJc3RyY3B5KHNbMV0uc25haWxfbmFtZSwgIlNuYWlsIEIiKTsKCXN0cmNweShzWzFdLm93bmVyLCAiQmVuIik7CgoJc3RyY3B5KHNbMl0uc25haWxfbmFtZSwgIlNuYWlsIEMiKTsKCXN0cmNweShzWzJdLm93bmVyLCAiTWFyayIpOwoKCXN0cmNweShzWzNdLnNuYWlsX25hbWUsICJTbmFpbCBEIik7CglzdHJjcHkoc1szXS5vd25lciwgIkpvbiIpOwoKCXN0cmNweShzWzRdLnNuYWlsX25hbWUsICJTbmFpbCBFIik7CglzdHJjcHkoc1s0XS5vd25lciwgIk1hcmsiKTsKCglzdHJjcHkoc1s1XS5zbmFpbF9uYW1lLCAiU25haWwgRiIpOwoJc3RyY3B5KHNbNV0ub3duZXIsICJCZW4iKTsKCgoJZm9yKGkgPSAwOyBpIDwgNjsgaSsrKQoJCXB0aHJlYWRfY3JlYXRlKCZ0W2ldLE5VTEwsKHZvaWQgKikgJnByaW50dmFsLCAodm9pZCAqKSAmc1tpXSk7CgoJZm9yKGkgPSAwOyBpIDwgNjsgaSsrKQoJCXB0aHJlYWRfam9pbih0W2ldLCBOVUxMKTsKCglyZXR1cm4gKDApOwp9Cgo=