#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#define MAX_SIZE 2000000
struct Data{
char name[ 20 ] ;
int value;
} ;
Data * sort ( Data * data , int numOfData) ; // insert sort using struct-datatype , ranked by the value)
pthread_t tid1, tid2;
pthread_mutex_t lock;
int numOfData = 0 ;
FILE * rank;
Data
* data
= ( Data
* ) malloc ( sizeof ( Data
) * MAX_SIZE
) ; // use struct datastructure ( char name[20] , int value)
char nameData[ 20 ] ; // two temp data for scanning from the file
int valueData;
int count = 0 ;
void * rankP ( void * param) { // <------ pthread
pthread_mutex_lock( & lock) ;
if ( fscanf ( rank
, "%s" , nameData
) == EOF
)
break ;
else
strcpy ( data
[ numOfData
] .
name , nameData
) ;
fscanf ( rank
, "%d" ,& valueData
) ; // get userID(%s) and userScore(%d)
data[ numOfData] .value = valueData;
numOfData++;
printf ( " working ........ count = %d \n " , count
++ ) ;
pthread_mutex_unlock( & lock) ;
}
}
int main ( int argc , char * argv[ ] ) {
rank
= fopen ( argv
[ 1 ] , "r" ) ;
time_t t1, t2;
if ( pthread_mutex_init( & lock, NULL) != 0 )
{
printf ( "\n mutex init failed\n " ) ;
return 1 ;
}
pthread_attr_t attr1 , attr2;
pthread_attr_init( & attr1) ;
pthread_attr_init( & attr2) ;
pthread_create( & tid1,& attr1, rankP, NULL) ;
pthread_create( & tid2,& attr2, rankP, NULL) ;
pthread_join( tid1, NULL) ;
pthread_join( tid2, NULL) ;
printf ( " sorted after %d seconds \n " , t2
- t1
) ;
// <---------------- parent process
printf ( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ) ;
char ch[ 5 ] ;
Data * t = sort( data, numOfData) ;
FILE
* result
= fopen ( argv
[ 2 ] , "w" ) ; // write in the data to file
for ( int i= 0 ; i<= numOfData- 1 ; i++ ) {
I2luY2x1ZGUgPHB0aHJlYWQuaD4KCiNpbmNsdWRlIDxzdGRpby5oPgoKI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2luY2x1ZGUgPHN0cmluZy5oPgoKI2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2luY2x1ZGUgPHRpbWUuaD4KCgoKI2RlZmluZSBNQVhfU0laRSAyMDAwMDAwCgoKCgoKCgoKCnN0cnVjdCBEYXRhewoKICAgICAgIGNoYXIgbmFtZVsyMF07CgogICAgICAgaW50IHZhbHVlOwoKICAgICAgIH07CgoKCkRhdGEgKnNvcnQgKERhdGEgKmRhdGEgLCBpbnQgbnVtT2ZEYXRhKSAgICA7ICAgICAgICAgICAvLyBpbnNlcnQgc29ydCB1c2luZyBzdHJ1Y3QtZGF0YXR5cGUgLCByYW5rZWQgYnkgdGhlIHZhbHVlKQoKCgogcHRocmVhZF90IHRpZDEsdGlkMjsKCiBwdGhyZWFkX211dGV4X3QgbG9jazsKCgoKIGludCBudW1PZkRhdGEgPTA7CgogRklMRSAqcmFuazsKCiBEYXRhICpkYXRhICA9IChEYXRhKiltYWxsb2Moc2l6ZW9mKERhdGEpKk1BWF9TSVpFKTsgICAgICAgICAgICAgICAgICAvLyB1c2Ugc3RydWN0IGRhdGFzdHJ1Y3R1cmUgKCBjaGFyIG5hbWVbMjBdICwgaW50IHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgIAoKIGNoYXIgbmFtZURhdGFbMjBdOyAgICAgICAvLyB0d28gdGVtcCBkYXRhIGZvciBzY2FubmluZyBmcm9tIHRoZSBmaWxlCgogaW50IHZhbHVlRGF0YTsgIAoKIGludCBjb3VudCA9IDA7CgoKCgoKdm9pZCAqcmFua1AgKHZvaWQgKnBhcmFtKXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgPC0tLS0tLSBwdGhyZWFkIAoKCgogICAgd2hpbGUoIWZlb2YocmFuaykpeyAKCiAgICBwdGhyZWFkX211dGV4X2xvY2soJmxvY2spOyAgICAgICAgIAoKCgogICAgaWYoZnNjYW5mKHJhbmssIiVzIixuYW1lRGF0YSk9PSBFT0YpCgogICAgYnJlYWs7CgogICAgZWxzZSAgICAgIAoKICAgIHN0cmNweShkYXRhW251bU9mRGF0YV0ubmFtZSxuYW1lRGF0YSk7ICAgICAgICAgIAoKICAgIGZzY2FuZihyYW5rLCIlZCIsJnZhbHVlRGF0YSk7ICAgICAgICAgICAgICAgLy8gZ2V0ICB1c2VySUQoJXMpIGFuZCB1c2VyU2NvcmUoJWQpICAgCgogICAgZGF0YVtudW1PZkRhdGFdLnZhbHVlID0gdmFsdWVEYXRhOyAgIAoKICAgIG51bU9mRGF0YSsrOyAgICAgICAgICAgIAoKICAgIHByaW50ZigiIHdvcmtpbmcgLi4uLi4uLi4gIGNvdW50ID0gJWQgIFxuIixjb3VudCsrKTsKCgoKICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrKTsKCiAgICAKCiAgICB9CgogICAgCgp9CgoKCgoKaW50IG1haW4gKGludCBhcmdjICwgY2hhciogYXJndltdKXsKCiAgICAKCgoKICAgIHJhbmsgPSBmb3Blbihhcmd2WzFdLCJyIik7CgogICAgdGltZV90IHQxLHQyOwoKICAgIHQxID0gdGltZShOVUxMKTsKCiAgICBpZihwdGhyZWFkX211dGV4X2luaXQoJmxvY2ssIE5VTEwpICE9IDApCgogICAgewoKICAgICAgICBwcmludGYoIlxuIG11dGV4IGluaXQgZmFpbGVkXG4iKTsKCiAgICAgICAgcmV0dXJuIDE7CgogICAgfQoKCgogICAgCgogICAgcHRocmVhZF9hdHRyX3QgYXR0cjEgLCBhdHRyMjsgIAoKICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyMSk7CgogICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIyKTsKCiAgICBwdGhyZWFkX2NyZWF0ZSgmdGlkMSwmYXR0cjEscmFua1AsTlVMTCk7CgogICAgcHRocmVhZF9jcmVhdGUoJnRpZDIsJmF0dHIyLHJhbmtQLE5VTEwpOwoKICAgIHB0aHJlYWRfam9pbih0aWQxLE5VTEwpOwoKICAgIHB0aHJlYWRfam9pbih0aWQyLE5VTEwpOwoKICAgIAoKICAgIHQyID0gdGltZShOVUxMKTsKCiAgICBwcmludGYoIiBzb3J0ZWQgYWZ0ZXIgJWQgc2Vjb25kcyBcbiIsIHQyLXQxKTsKCiAgICAKCgoKCgogICAgLy8gIDwtLS0tLS0tLS0tLS0tLS0tICAgcGFyZW50IHByb2Nlc3MKCiAgICBwcmludGYoIn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Iik7CgoKCiAgICAgY2hhciBjaFs1XTsKCiAgICAgRGF0YSAqdCA9IHNvcnQoZGF0YSxudW1PZkRhdGEpOyAgIAoKCgogICAgRklMRSAqcmVzdWx0ID0gZm9wZW4oYXJndlsyXSwidyIpOyAgICAgICAgLy8gd3JpdGUgaW4gdGhlIGRhdGEgdG8gZmlsZQoKICAgIGZvcihpbnQgaT0wIDsgaTw9bnVtT2ZEYXRhLTEgOyBpKyspewoKICAgICAgICAgICAgc3ByaW50ZihjaCwiJWQiLHRbaV0udmFsdWUpOwoKICAgICAgICAgICAgZnByaW50ZihyZXN1bHQsdFtpXS5uYW1lKTsKCiAgICAgICAgICAgIGZwcmludGYocmVzdWx0LCJcdCIpOwoKICAgICAgICAgICAgZnByaW50ZihyZXN1bHQsY2gpOwoKICAgICAgICAgICAgZnByaW50ZihyZXN1bHQsIlxuIik7CgogICAgICAgICAgICAKCiAgICAgICAgICAgIAoKICAgICAgIA==
compilation info
prog.c:35: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
prog.c:49: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
prog.c: In function ‘rankP’:
prog.c:77: error: ‘data’ undeclared (first use in this function)
prog.c:77: error: (Each undeclared identifier is reported only once
prog.c:77: error: for each function it appears in.)
prog.c:79: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result
prog.c: In function ‘main’:
prog.c:147: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘time_t’
prog.c:163: error: ‘Data’ undeclared (first use in this function)
prog.c:163: error: ‘t’ undeclared (first use in this function)
prog.c:163: warning: implicit declaration of function ‘sort’
prog.c:163: error: ‘data’ undeclared (first use in this function)
prog.c:169: error: ‘for’ loop initial declaration used outside C99 mode
prog.c:173: warning: format not a string literal and no format arguments
prog.c:177: warning: format not a string literal and no format arguments
prog.c:179: error: expected declaration or statement at end of input
prog.c:179: error: expected declaration or statement at end of input
stdout