chrislo-sourceclassifier 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest +0 -312
- data/Rakefile +2 -2
- data/sourceclassifier.gemspec +6 -6
- metadata +4 -316
- data/sources/gcc/ackermann.gcc-2.gcc +0 -93
- data/sources/gcc/ackermann.gcc-3.gcc +0 -20
- data/sources/gcc/ary.gcc +0 -40
- data/sources/gcc/binarytrees.gcc +0 -136
- data/sources/gcc/binarytrees.gcc-2.gcc +0 -140
- data/sources/gcc/binarytrees.gcc-3.gcc +0 -134
- data/sources/gcc/chameneos.gcc +0 -117
- data/sources/gcc/chameneos.gcc-2.gcc +0 -134
- data/sources/gcc/chameneos.gcc-3.gcc +0 -120
- data/sources/gcc/chameneosredux.gcc +0 -306
- data/sources/gcc/echo.gcc +0 -144
- data/sources/gcc/except.gcc +0 -52
- data/sources/gcc/fannkuch.gcc +0 -105
- data/sources/gcc/fannkuch.gcc-2.gcc +0 -94
- data/sources/gcc/fasta.gcc +0 -158
- data/sources/gcc/fasta.gcc-2.gcc +0 -132
- data/sources/gcc/fasta.gcc-3.gcc +0 -145
- data/sources/gcc/fasta.gcc-4.gcc +0 -141
- data/sources/gcc/fibo.gcc +0 -20
- data/sources/gcc/harmonic.gcc +0 -22
- data/sources/gcc/hash.gcc +0 -31
- data/sources/gcc/hash2.gcc +0 -38
- data/sources/gcc/heapsort.gcc +0 -72
- data/sources/gcc/hello.gcc-2.gcc +0 -12
- data/sources/gcc/hello.gcc-3.gcc +0 -20
- data/sources/gcc/knucleotide.gcc +0 -173
- data/sources/gcc/knucleotide.gcc-2.gcc +0 -168
- data/sources/gcc/lists.gcc +0 -226
- data/sources/gcc/magicsquares.gcc +0 -378
- data/sources/gcc/mandelbrot.gcc +0 -84
- data/sources/gcc/mandelbrot.gcc-2.gcc +0 -63
- data/sources/gcc/mandelbrot.gcc-3.gcc +0 -91
- data/sources/gcc/mandelbrot.gcc-4.gcc +0 -78
- data/sources/gcc/matrix.gcc +0 -66
- data/sources/gcc/message.gcc-2.gcc +0 -72
- data/sources/gcc/message.gcc-3.gcc +0 -64
- data/sources/gcc/methcall.gcc +0 -89
- data/sources/gcc/moments.gcc +0 -120
- data/sources/gcc/nbody.gcc +0 -142
- data/sources/gcc/nbody.gcc-2.gcc +0 -143
- data/sources/gcc/nbody.gcc-3.gcc +0 -142
- data/sources/gcc/nestedloop.gcc +0 -25
- data/sources/gcc/nsieve.gcc +0 -35
- data/sources/gcc/nsievebits.gcc-2.gcc +0 -37
- data/sources/gcc/nsievebits.gcc-3.gcc +0 -53
- data/sources/gcc/objinst.gcc +0 -95
- data/sources/gcc/partialsums.gcc +0 -86
- data/sources/gcc/partialsums.gcc-3.gcc +0 -81
- data/sources/gcc/partialsums.gcc-4.gcc +0 -68
- data/sources/gcc/pidigits.gcc +0 -105
- data/sources/gcc/primes.gcc +0 -75
- data/sources/gcc/prodcons.gcc +0 -86
- data/sources/gcc/random.gcc +0 -29
- data/sources/gcc/raytracer.gcc +0 -125
- data/sources/gcc/raytracer.gcc-2.gcc +0 -181
- data/sources/gcc/recursive.gcc +0 -68
- data/sources/gcc/recursive.gcc-2.gcc +0 -55
- data/sources/gcc/regexdna.gcc-2.gcc +0 -126
- data/sources/gcc/regexmatch.gcc +0 -136
- data/sources/gcc/revcomp.gcc +0 -85
- data/sources/gcc/revcomp.gcc-2.gcc +0 -88
- data/sources/gcc/revcomp.gcc-4.gcc +0 -71
- data/sources/gcc/reversefile.gcc +0 -103
- data/sources/gcc/reversefile.gcc-2.gcc +0 -56
- data/sources/gcc/sieve.gcc +0 -34
- data/sources/gcc/spectralnorm.gcc +0 -54
- data/sources/gcc/spellcheck.gcc +0 -72
- data/sources/gcc/spellcheck.gcc-2.gcc +0 -61
- data/sources/gcc/strcat.gcc +0 -38
- data/sources/gcc/sumcol.gcc-2.gcc +0 -98
- data/sources/gcc/sumcol.gcc-3.gcc +0 -22
- data/sources/gcc/sumcol.gcc-4.gcc +0 -18
- data/sources/gcc/sumcol.gcc-5.gcc +0 -32
- data/sources/gcc/takfp.gcc +0 -23
- data/sources/gcc/tcp-stream.gcc +0 -122
- data/sources/gcc/tcpecho.gcc +0 -122
- data/sources/gcc/tcpecho.gcc-2.gcc +0 -136
- data/sources/gcc/tcprequest.gcc +0 -122
- data/sources/gcc/threadring.gcc +0 -73
- data/sources/gcc/wc.gcc +0 -52
- data/sources/gcc/wc.gcc-2.gcc +0 -40
- data/sources/gcc/wc.gcc-3.gcc +0 -46
- data/sources/gcc/wordfreq.gcc-2.gcc +0 -85
- data/sources/perl/ackermann.perl +0 -28
- data/sources/perl/ackermann.perl-2.perl +0 -25
- data/sources/perl/ackermann.perl-3.perl +0 -20
- data/sources/perl/ackermann.perl-4.perl +0 -18
- data/sources/perl/ary.perl +0 -25
- data/sources/perl/ary.perl-2.perl +0 -23
- data/sources/perl/binarytrees.perl +0 -66
- data/sources/perl/binarytrees.perl-2.perl +0 -71
- data/sources/perl/chameneos.perl +0 -67
- data/sources/perl/echo.perl +0 -81
- data/sources/perl/except.perl +0 -73
- data/sources/perl/fannkuch.perl +0 -44
- data/sources/perl/fannkuch.perl-2.perl +0 -38
- data/sources/perl/fasta.perl +0 -112
- data/sources/perl/fasta.perl-2.perl +0 -135
- data/sources/perl/fasta.perl-4.perl +0 -122
- data/sources/perl/fibo.perl +0 -15
- data/sources/perl/fibo.perl-2.perl +0 -0
- data/sources/perl/fibo.perl-3.perl +0 -0
- data/sources/perl/harmonic.perl +0 -7
- data/sources/perl/hash.perl +0 -23
- data/sources/perl/hash.perl-2.perl +0 -17
- data/sources/perl/hash.perl-3.perl +0 -24
- data/sources/perl/hash2.perl +0 -16
- data/sources/perl/heapsort.perl +0 -65
- data/sources/perl/heapsort.perl-2.perl +0 -0
- data/sources/perl/hello.perl +0 -5
- data/sources/perl/knucleotide.perl-2.perl +0 -30
- data/sources/perl/lists.perl +0 -48
- data/sources/perl/mandelbrot.perl-2.perl +0 -32
- data/sources/perl/matrix.perl +0 -59
- data/sources/perl/matrix.perl-2.perl +0 -0
- data/sources/perl/matrix.perl-3.perl +0 -0
- data/sources/perl/message.perl +0 -27
- data/sources/perl/methcall.perl +0 -66
- data/sources/perl/moments.perl +0 -44
- data/sources/perl/nbody.perl +0 -108
- data/sources/perl/nestedloop.perl +0 -28
- data/sources/perl/nsieve.perl-2.perl +0 -41
- data/sources/perl/nsieve.perl-4.perl +0 -43
- data/sources/perl/nsievebits.perl +0 -37
- data/sources/perl/objinst.perl +0 -73
- data/sources/perl/partialsums.perl-3.perl +0 -31
- data/sources/perl/pidigits.perl +0 -52
- data/sources/perl/pidigits.perl-2.perl +0 -47
- data/sources/perl/process.perl +0 -50
- data/sources/perl/prodcons.perl +0 -47
- data/sources/perl/random.perl-4.perl +0 -17
- data/sources/perl/recursive.perl-2.perl +0 -57
- data/sources/perl/regexdna.perl +0 -48
- data/sources/perl/regexdna.perl-2.perl +0 -43
- data/sources/perl/regexdna.perl-3.perl +0 -50
- data/sources/perl/regexdna.perl-4.perl +0 -49
- data/sources/perl/regexdna.perl-5.perl +0 -42
- data/sources/perl/regexdna.perl-6.perl +0 -43
- data/sources/perl/regexmatch.perl +0 -35
- data/sources/perl/revcomp.perl-2.perl +0 -34
- data/sources/perl/reversefile.perl +0 -8
- data/sources/perl/reversefile.perl-2.perl +0 -0
- data/sources/perl/reversefile.perl-3.perl +0 -0
- data/sources/perl/sieve.perl +0 -23
- data/sources/perl/spectralnorm.perl-2.perl +0 -54
- data/sources/perl/spellcheck.perl +0 -24
- data/sources/perl/strcat.perl +0 -13
- data/sources/perl/strcat.perl-2.perl +0 -0
- data/sources/perl/sumcol.perl +0 -8
- data/sources/perl/takfp.perl +0 -23
- data/sources/perl/takfp.perl-3.perl +0 -20
- data/sources/perl/tcpecho.perl +0 -61
- data/sources/perl/tcprequest.perl +0 -61
- data/sources/perl/tcpstream.perl +0 -61
- data/sources/perl/threadring.perl +0 -55
- data/sources/perl/threadring.perl-2.perl +0 -43
- data/sources/perl/wc.perl +0 -20
- data/sources/perl/wc.perl-2.perl +0 -14
- data/sources/perl/wordfreq.perl +0 -22
- data/sources/perl/wordfreq.perl-3.perl +0 -0
- data/sources/perl/wordfreq.perl3.perl +0 -0
- data/sources/python/ackermann.python +0 -21
- data/sources/python/ary.python +0 -19
- data/sources/python/binarytrees.python +0 -39
- data/sources/python/binarytrees.python-3.python +0 -44
- data/sources/python/chameneos.python-6.python +0 -73
- data/sources/python/chameneosredux.python +0 -126
- data/sources/python/chameneosredux.python-2.python +0 -122
- data/sources/python/dispatch.python +0 -176
- data/sources/python/dispatch.python-2.python +0 -136
- data/sources/python/echo.python +0 -64
- data/sources/python/except.python +0 -62
- data/sources/python/fannkuch.python +0 -50
- data/sources/python/fannkuch.python-2.python +0 -54
- data/sources/python/fasta.python-2.python +0 -79
- data/sources/python/fibo.python +0 -17
- data/sources/python/fibo.python-2.python +0 -0
- data/sources/python/fibo.python-3.python +0 -0
- data/sources/python/harmonic.python-2.python +0 -9
- data/sources/python/hash.python +0 -21
- data/sources/python/hash.python-2.python +0 -0
- data/sources/python/hash2.python +0 -30
- data/sources/python/heapsort.python-3.python +0 -66
- data/sources/python/hello.python +0 -5
- data/sources/python/implicitode.python +0 -231
- data/sources/python/knucleotide.python +0 -55
- data/sources/python/lists.python +0 -44
- data/sources/python/magicsquares.python +0 -145
- data/sources/python/mandelbrot.python +0 -44
- data/sources/python/mandelbrot.python-2.python +0 -35
- data/sources/python/mandelbrot.python-3.python +0 -46
- data/sources/python/matrix.python +0 -34
- data/sources/python/matrix.python-2.python +0 -23
- data/sources/python/message.python +0 -24
- data/sources/python/message.python-2.python +0 -20
- data/sources/python/message.python-3.python +0 -19
- data/sources/python/meteor.python +0 -210
- data/sources/python/meteor.python-2.python +0 -192
- data/sources/python/methcall.python +0 -51
- data/sources/python/moments.python +0 -65
- data/sources/python/nbody.python +0 -123
- data/sources/python/nbody.python-2.python +0 -120
- data/sources/python/nestedloop.python +0 -24
- data/sources/python/nsieve.python +0 -27
- data/sources/python/nsieve.python-2.python +0 -23
- data/sources/python/nsieve.python-4.python +0 -25
- data/sources/python/nsievebits.python +0 -27
- data/sources/python/nsievebits.python-2.python +0 -43
- data/sources/python/objinst.python +0 -53
- data/sources/python/partialsums.python +0 -37
- data/sources/python/partialsums.python-2.python +0 -35
- data/sources/python/partialsums.python-3.python +0 -48
- data/sources/python/pidigits.python +0 -38
- data/sources/python/pidigits.python-3.python +0 -63
- data/sources/python/pidigits.python-4.python +0 -24
- data/sources/python/process.python +0 -51
- data/sources/python/process.python-2.python +0 -133
- data/sources/python/prodcons.python +0 -51
- data/sources/python/prodcons.python-2.python +0 -0
- data/sources/python/random.python +0 -27
- data/sources/python/raytracer.python +0 -203
- data/sources/python/recursive.python +0 -35
- data/sources/python/regexdna.python +0 -39
- data/sources/python/regexdna.python-2.python +0 -34
- data/sources/python/regexmatch.python +0 -36
- data/sources/python/revcomp.python-3.python +0 -31
- data/sources/python/reversefile.python +0 -13
- data/sources/python/reversefile.python-2.python +0 -0
- data/sources/python/reversefile.python-3.python +0 -0
- data/sources/python/sieve.python +0 -50
- data/sources/python/spectralnorm.python-2.python +0 -36
- data/sources/python/spellcheck.python +0 -17
- data/sources/python/strcat.python +0 -35
- data/sources/python/strcat.python-2.python +0 -0
- data/sources/python/sumcol.python-2.python +0 -0
- data/sources/python/sumcol.python-3.python +0 -0
- data/sources/python/takfp.python +0 -19
- data/sources/python/tcpecho.python +0 -67
- data/sources/python/tcprequest.python +0 -67
- data/sources/python/tcpstream.python +0 -67
- data/sources/python/threadring.python +0 -47
- data/sources/python/threadring.python-2.python +0 -40
- data/sources/python/threadring.python-3.python +0 -34
- data/sources/python/wc.python-2.python +0 -19
- data/sources/python/wordfreq.python +0 -43
- data/sources/python/wordfreq.python-2.python +0 -0
- data/sources/python/wordfreq.python-3.python +0 -28
- data/sources/python/wordfreq.python-4.python +0 -38
- data/sources/python/wordfreq.python-5.python +0 -39
- data/sources/ruby/ackermann.ruby +0 -17
- data/sources/ruby/ackermann.ruby-5.ruby +0 -153
- data/sources/ruby/ary.ruby +0 -22
- data/sources/ruby/binarytrees.ruby-2.ruby +0 -55
- data/sources/ruby/chameneos.ruby-2.ruby +0 -71
- data/sources/ruby/dispatch.ruby +0 -114
- data/sources/ruby/echo.ruby +0 -41
- data/sources/ruby/except.ruby +0 -61
- data/sources/ruby/except.ruby-2.ruby +0 -61
- data/sources/ruby/fannkuch.ruby +0 -42
- data/sources/ruby/fasta.ruby +0 -81
- data/sources/ruby/fibo.ruby +0 -15
- data/sources/ruby/harmonic.ruby-2.ruby +0 -15
- data/sources/ruby/hash.ruby +0 -19
- data/sources/ruby/hash2.ruby +0 -23
- data/sources/ruby/heapsort.ruby +0 -55
- data/sources/ruby/hello.ruby +0 -6
- data/sources/ruby/knucleotide.ruby-2.ruby +0 -44
- data/sources/ruby/lists.ruby +0 -46
- data/sources/ruby/mandelbrot.ruby-3.ruby +0 -63
- data/sources/ruby/matrix.ruby +0 -40
- data/sources/ruby/matrix.ruby-2.ruby +0 -30
- data/sources/ruby/message.ruby +0 -29
- data/sources/ruby/message.ruby-2.ruby +0 -24
- data/sources/ruby/meteor.ruby +0 -386
- data/sources/ruby/meteor.ruby-2.ruby +0 -561
- data/sources/ruby/methcall.ruby +0 -58
- data/sources/ruby/methcall.ruby-2.ruby +0 -54
- data/sources/ruby/moments.ruby +0 -64
- data/sources/ruby/nbody.ruby-2.ruby +0 -145
- data/sources/ruby/nestedloop.ruby +0 -22
- data/sources/ruby/nsieve.ruby +0 -36
- data/sources/ruby/nsieve.ruby-2.ruby +0 -25
- data/sources/ruby/nsievebits.ruby-2.ruby +0 -42
- data/sources/ruby/objinst.ruby +0 -58
- data/sources/ruby/partialsums.ruby +0 -39
- data/sources/ruby/pidigits.ruby +0 -92
- data/sources/ruby/pidigits.ruby-2.ruby +0 -109
- data/sources/ruby/prodcons.ruby +0 -41
- data/sources/ruby/random.ruby +0 -17
- data/sources/ruby/recursive.ruby-2.ruby +0 -53
- data/sources/ruby/regexdna.ruby +0 -32
- data/sources/ruby/regexdna.ruby-2.ruby +0 -38
- data/sources/ruby/regexmatch.ruby +0 -33
- data/sources/ruby/revcomp.ruby +0 -28
- data/sources/ruby/reversefile.ruby +0 -7
- data/sources/ruby/sieve.ruby +0 -30
- data/sources/ruby/spectralnorm.ruby +0 -48
- data/sources/ruby/spellcheck.ruby +0 -18
- data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
- data/sources/ruby/strcat.ruby +0 -12
- data/sources/ruby/strcat.ruby-2.ruby +0 -12
- data/sources/ruby/sumcol.ruby +0 -12
- data/sources/ruby/sumcol.ruby-2.ruby +0 -5
- data/sources/ruby/takfp.ruby +0 -15
- data/sources/ruby/tcpecho.ruby +0 -45
- data/sources/ruby/tcprequest.ruby +0 -45
- data/sources/ruby/tcpstream.ruby +0 -45
- data/sources/ruby/threadring.ruby +0 -61
- data/sources/ruby/threadring.ruby-2.ruby +0 -33
- data/sources/ruby/wc.ruby +0 -15
- data/sources/ruby/wordfreq.ruby +0 -17
- data/sources/ruby/wordfreq.ruby2.ruby +0 -0
data/sources/gcc/chameneos.gcc
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/* The Computer Language Shootout
|
|
2
|
-
http://shootout.alioth.debian.org/
|
|
3
|
-
|
|
4
|
-
contributed by Josh Goldfoot
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
#include <semaphore.h>
|
|
8
|
-
#include <pthread.h>
|
|
9
|
-
#include <stdio.h>
|
|
10
|
-
#include <stdlib.h>
|
|
11
|
-
|
|
12
|
-
typedef enum { Blue, Red, Yellow, Faded } color;
|
|
13
|
-
|
|
14
|
-
sem_t AtMostTwo;
|
|
15
|
-
sem_t Mutex;
|
|
16
|
-
sem_t SemPriv;
|
|
17
|
-
|
|
18
|
-
int mpStatus = 1;
|
|
19
|
-
color aColor, bColor;
|
|
20
|
-
long meetingsLeft;
|
|
21
|
-
long reports[4];
|
|
22
|
-
|
|
23
|
-
color complementaryColor (color c1, color c2)
|
|
24
|
-
{
|
|
25
|
-
if (c2 == Faded) return Faded;
|
|
26
|
-
if (c1 == c2) return c1;
|
|
27
|
-
switch (c1)
|
|
28
|
-
{
|
|
29
|
-
case Blue:
|
|
30
|
-
return c2 == Red ? Yellow : Red;
|
|
31
|
-
case Red:
|
|
32
|
-
return c2 == Blue ? Yellow : Blue;
|
|
33
|
-
case Yellow:
|
|
34
|
-
return c2 == Blue ? Red : Blue;
|
|
35
|
-
default:
|
|
36
|
-
return c1;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
color Cooperation (int id, color c)
|
|
41
|
-
{
|
|
42
|
-
color otherColor;
|
|
43
|
-
|
|
44
|
-
sem_wait (&AtMostTwo);
|
|
45
|
-
sem_wait (&Mutex);
|
|
46
|
-
switch (mpStatus)
|
|
47
|
-
{
|
|
48
|
-
case 1:
|
|
49
|
-
aColor = c;
|
|
50
|
-
mpStatus = 2;
|
|
51
|
-
sem_post (&Mutex);
|
|
52
|
-
sem_wait (&SemPriv);
|
|
53
|
-
otherColor = bColor;
|
|
54
|
-
sem_post (&Mutex);
|
|
55
|
-
sem_post (&AtMostTwo);
|
|
56
|
-
sem_post (&AtMostTwo);
|
|
57
|
-
break;
|
|
58
|
-
case 2:
|
|
59
|
-
mpStatus = (--meetingsLeft > 0 ? 1 : 3);
|
|
60
|
-
bColor = c;
|
|
61
|
-
otherColor = aColor;
|
|
62
|
-
sem_post (&SemPriv);
|
|
63
|
-
break;
|
|
64
|
-
case 3:
|
|
65
|
-
default:
|
|
66
|
-
otherColor = Faded;
|
|
67
|
-
sem_post (&Mutex);
|
|
68
|
-
sem_post (&AtMostTwo);
|
|
69
|
-
}
|
|
70
|
-
return otherColor;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
void chameneosCode (void *args)
|
|
74
|
-
{
|
|
75
|
-
int myId;
|
|
76
|
-
long meetings;
|
|
77
|
-
color myColor, otherColor;
|
|
78
|
-
sscanf ((char *) args, "%d %d", &myId, &myColor);
|
|
79
|
-
meetings = 0;
|
|
80
|
-
while (myColor != Faded)
|
|
81
|
-
{
|
|
82
|
-
otherColor = Cooperation (myId, myColor);
|
|
83
|
-
myColor = complementaryColor (myColor, otherColor);
|
|
84
|
-
meetings++;
|
|
85
|
-
}
|
|
86
|
-
reports[myId] = meetings - 1;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
int main (int argc, char *argv[])
|
|
90
|
-
{
|
|
91
|
-
color tabColor[4] = { Blue, Red, Yellow, Blue };
|
|
92
|
-
pthread_t tabPid[4];
|
|
93
|
-
char theArgs[32][4];
|
|
94
|
-
int i;
|
|
95
|
-
|
|
96
|
-
sem_init (&AtMostTwo, 0, 2);
|
|
97
|
-
sem_init (&Mutex, 0, 1);
|
|
98
|
-
sem_init (&SemPriv, 0, 0);
|
|
99
|
-
|
|
100
|
-
meetingsLeft = (argc > 1) ? atoi (argv[1]) : 1000000;
|
|
101
|
-
|
|
102
|
-
for (i = 0; i < 4; i++)
|
|
103
|
-
{
|
|
104
|
-
sprintf (theArgs[i], "%d %d", i, tabColor[i]);
|
|
105
|
-
pthread_create (&tabPid[i], NULL, (void *(*)(void *)) chameneosCode,
|
|
106
|
-
theArgs[i]);
|
|
107
|
-
}
|
|
108
|
-
for (i = 0; i < 4; i++)
|
|
109
|
-
pthread_join (tabPid[i], NULL);
|
|
110
|
-
|
|
111
|
-
long sum = reports[0];
|
|
112
|
-
for (i = 1; i < 4; i++)
|
|
113
|
-
sum += reports[i];
|
|
114
|
-
printf ("%d\n", sum);
|
|
115
|
-
|
|
116
|
-
return 0;
|
|
117
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/* The Computer Language Benchmarks Game
|
|
2
|
-
http://shootout.alioth.debian.org/
|
|
3
|
-
|
|
4
|
-
Written by Jorge Peixoto de Morais Neto
|
|
5
|
-
based on code by Josh Goldfoot */
|
|
6
|
-
|
|
7
|
-
#include <stdio.h>
|
|
8
|
-
#include <stdlib.h>
|
|
9
|
-
#include <pthread.h>
|
|
10
|
-
#include <semaphore.h>
|
|
11
|
-
#include <err.h>
|
|
12
|
-
|
|
13
|
-
static sem_t mutex, second_creature;
|
|
14
|
-
|
|
15
|
-
static unsigned long meetingsleft;
|
|
16
|
-
|
|
17
|
-
typedef enum { Blue, Red, Yellow, Faded } color_t;
|
|
18
|
-
typedef struct {
|
|
19
|
-
unsigned long *meetingsp;
|
|
20
|
-
color_t color;
|
|
21
|
-
} creature_t;
|
|
22
|
-
|
|
23
|
-
/* When this function is called with two different colors, it must return the other color */
|
|
24
|
-
/* We assume that none of the colors is Faded */
|
|
25
|
-
/* If it is called with two equal colors, the specification allows us to return any color. */
|
|
26
|
-
/* In this case, we return Red if both colors are Blue, Yellow if both are Red and Blue if both are Yellow */
|
|
27
|
-
static color_t complementarycolor (color_t c1, color_t c2) {
|
|
28
|
-
switch (c1) {
|
|
29
|
-
case Blue:
|
|
30
|
-
return c2 == Red ? Yellow : Red;
|
|
31
|
-
case Red:
|
|
32
|
-
return c2 == Yellow ? Blue : Yellow;
|
|
33
|
-
case Yellow:
|
|
34
|
-
default:
|
|
35
|
-
return c2 == Blue ? Red : Blue;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/* This is the meeting place. Multiple threads call this function. */
|
|
40
|
-
/* This function returns the new color the creature must assume after the meeting*/
|
|
41
|
-
/* The first creature locks mutex, sets color1 = color, updates mp_state, */
|
|
42
|
-
/* unlocks the mutex and waits to lock second_creature */
|
|
43
|
-
/* The second creature locks mutex, sets othercolor=color1 and color2 = color , */
|
|
44
|
-
/* decrements meetingsleft, updates mp_state, unlocks second_creature and returns */
|
|
45
|
-
/* The first creature sets othercolor = color2, unlocks mutex and returns */
|
|
46
|
-
/* mp_state is EMPTY again, the two semaphores are back to initial values and the cycle continues */
|
|
47
|
-
/* until meetingsleft reaches 0. */
|
|
48
|
-
static color_t new_color (color_t color) {
|
|
49
|
-
/* Meeting place state*/
|
|
50
|
-
static enum {
|
|
51
|
-
MEETINGS_LIMIT_REACHED = -1,
|
|
52
|
-
EMPTY,
|
|
53
|
-
ONE_CREATURE
|
|
54
|
-
} mp_state = EMPTY;
|
|
55
|
-
|
|
56
|
-
static color_t color1, color2;
|
|
57
|
-
color_t othercolor;
|
|
58
|
-
sem_wait (&mutex);
|
|
59
|
-
switch (mp_state) {
|
|
60
|
-
case EMPTY:
|
|
61
|
-
color1 = color;
|
|
62
|
-
mp_state = ONE_CREATURE;
|
|
63
|
-
sem_post (&mutex);
|
|
64
|
-
sem_wait (&second_creature);
|
|
65
|
-
othercolor = color2;
|
|
66
|
-
sem_post (&mutex);
|
|
67
|
-
break;
|
|
68
|
-
case ONE_CREATURE:
|
|
69
|
-
othercolor = color1;
|
|
70
|
-
color2 = color;
|
|
71
|
-
mp_state = (--meetingsleft ? EMPTY : MEETINGS_LIMIT_REACHED);
|
|
72
|
-
sem_post (&second_creature);
|
|
73
|
-
break;
|
|
74
|
-
case MEETINGS_LIMIT_REACHED:
|
|
75
|
-
default:
|
|
76
|
-
sem_post (&mutex);
|
|
77
|
-
return Faded;
|
|
78
|
-
}
|
|
79
|
-
return complementarycolor (color, othercolor);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/* This function simulates a creature. */
|
|
83
|
-
static void *run_creature (void *voidpme) {
|
|
84
|
-
creature_t const *me = voidpme;
|
|
85
|
-
unsigned long meetings = 0;
|
|
86
|
-
color_t color = me->color;
|
|
87
|
-
do {
|
|
88
|
-
meetings++;
|
|
89
|
-
color = new_color (color);
|
|
90
|
-
} while (color != Faded);
|
|
91
|
-
/* The '-1' compensates the fact that the meetings variable counts the meeting */
|
|
92
|
-
/* in wich the creature becomes faded (but it shouldn't) */
|
|
93
|
-
*me->meetingsp = meetings - 1;
|
|
94
|
-
static int zero = 0;
|
|
95
|
-
/* We return a pointer to 0, meaning success. */
|
|
96
|
-
return &zero;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/* This function sets loose four creatures and returns the sum of reported meetings*/
|
|
100
|
-
static unsigned long meetings_of_four_creatures (void) {
|
|
101
|
-
sem_init (&mutex, 0, 1);
|
|
102
|
-
sem_init (&second_creature, 0, 0);
|
|
103
|
-
|
|
104
|
-
unsigned long reports[4];
|
|
105
|
-
creature_t creatures[4] = {{&reports[0], Blue},
|
|
106
|
-
{&reports[1], Red},
|
|
107
|
-
{&reports[2], Yellow},
|
|
108
|
-
{&reports[3], Blue}};
|
|
109
|
-
pthread_t pids[4];
|
|
110
|
-
int i;
|
|
111
|
-
for (i = 0; i < 4; i++)
|
|
112
|
-
pthread_create (&pids[i], NULL, run_creature, &creatures[i]);
|
|
113
|
-
|
|
114
|
-
for (i = 0; i < 4; i++)
|
|
115
|
-
pthread_join (pids[i], NULL);
|
|
116
|
-
|
|
117
|
-
unsigned long sum = reports[0];
|
|
118
|
-
for (i = 1; i < 4; i++)
|
|
119
|
-
sum += reports[i];
|
|
120
|
-
return sum;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
int main (int argc, char const **argv) {
|
|
124
|
-
meetingsleft = 1e6;
|
|
125
|
-
if (argc > 1) {
|
|
126
|
-
char *tail;
|
|
127
|
-
meetingsleft = strtoul (argv[1], &tail, 0);
|
|
128
|
-
if (tail == argv[1])
|
|
129
|
-
errx (1, "Could not convert \"%s\" to an unsigned long integer", argv[1]);
|
|
130
|
-
}
|
|
131
|
-
unsigned long sum = meetings_of_four_creatures ();
|
|
132
|
-
printf ("%lu\n", sum);
|
|
133
|
-
return 0;
|
|
134
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/* The Computer Language Benchmarks Game
|
|
2
|
-
http://shootout.alioth.debian.org/
|
|
3
|
-
|
|
4
|
-
Written by Jorge Peixoto de Morais Neto
|
|
5
|
-
based on code by Josh Goldfoot
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
#include <stdio.h>
|
|
9
|
-
#include <stdlib.h>
|
|
10
|
-
#include <pthread.h>
|
|
11
|
-
#include <sched.h>
|
|
12
|
-
#include <stdbool.h>
|
|
13
|
-
#include <err.h>
|
|
14
|
-
static unsigned long meetingsleft;
|
|
15
|
-
|
|
16
|
-
typedef enum { Blue, Red, Yellow, Faded } color_t;
|
|
17
|
-
typedef struct {
|
|
18
|
-
color_t color;
|
|
19
|
-
bool waiting_partner;
|
|
20
|
-
} creature_t;
|
|
21
|
-
|
|
22
|
-
/* When this function is called with two different colors, it must return the other color */
|
|
23
|
-
/* We assume that none of the colors is Faded */
|
|
24
|
-
/* If it is called with two equal colors, the specification allows us to return any color. */
|
|
25
|
-
/* In this case, we return Red if both colors are Blue, Yellow if both are Red and Blue if both are Yellow */
|
|
26
|
-
static color_t complementarycolor (color_t c1, color_t c2) {
|
|
27
|
-
switch (c1) {
|
|
28
|
-
case Yellow:
|
|
29
|
-
return c2 == Blue ? Red : Blue;
|
|
30
|
-
case Red:
|
|
31
|
-
return c2 == Yellow ? Blue : Yellow;
|
|
32
|
-
default:
|
|
33
|
-
case Blue:
|
|
34
|
-
return c2 == Red ? Yellow : Red;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* This is the meeting place. The threads simulating creatures call this function. */
|
|
39
|
-
/* This function takes a pointer to the creaure data */
|
|
40
|
-
/* and writes to the color field the new color the creature must assume */
|
|
41
|
-
static void meeting_place (creature_t volatile *creature_p) {
|
|
42
|
-
/* A creature in the meeting place waiting for a partner. NULL means */
|
|
43
|
-
/* there is no such creature */
|
|
44
|
-
static creature_t volatile *waiting_creature_p = NULL;
|
|
45
|
-
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
46
|
-
pthread_mutex_lock (&mutex);
|
|
47
|
-
if (!waiting_creature_p) {
|
|
48
|
-
if (meetingsleft) {
|
|
49
|
-
waiting_creature_p = creature_p;
|
|
50
|
-
creature_p->waiting_partner = true;
|
|
51
|
-
pthread_mutex_unlock(&mutex);
|
|
52
|
-
while (creature_p->waiting_partner)
|
|
53
|
-
sched_yield ();
|
|
54
|
-
} else {
|
|
55
|
-
pthread_mutex_unlock (&mutex);
|
|
56
|
-
creature_p->color = Faded;
|
|
57
|
-
}
|
|
58
|
-
} else {
|
|
59
|
-
color_t newcolor =
|
|
60
|
-
complementarycolor (creature_p->color, waiting_creature_p->color);
|
|
61
|
-
creature_p->color = newcolor;
|
|
62
|
-
waiting_creature_p->color = newcolor;
|
|
63
|
-
waiting_creature_p->waiting_partner = false;
|
|
64
|
-
waiting_creature_p = NULL;
|
|
65
|
-
meetingsleft--;
|
|
66
|
-
pthread_mutex_unlock (&mutex);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/* This function simulates a creature. */
|
|
71
|
-
/* It returns a pointer to the number of meetings this creature performed */
|
|
72
|
-
static void *run_creature (void *me_voidp) {
|
|
73
|
-
creature_t *me_p = me_voidp;
|
|
74
|
-
unsigned long meetings = 0;
|
|
75
|
-
do {
|
|
76
|
-
meetings++;
|
|
77
|
-
meeting_place (me_p);
|
|
78
|
-
} while (me_p->color != Faded);
|
|
79
|
-
unsigned long *meetings_p = malloc (sizeof *meetings_p);
|
|
80
|
-
/* The '-1' compensates the fact that the meetings variable counts the meeting */
|
|
81
|
-
/* in wich the creature becomes faded (but it shouldn't) */
|
|
82
|
-
*meetings_p = meetings - 1;
|
|
83
|
-
return meetings_p;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
#define NCREATURES 4
|
|
87
|
-
/* This function unleashes NCREATURES creatures and returns the sum of reported meetings */
|
|
88
|
-
static unsigned long meetings_of_creatures (void) {
|
|
89
|
-
creature_t creatures[NCREATURES];
|
|
90
|
-
creatures[0].color = Blue;
|
|
91
|
-
creatures[1].color = Red;
|
|
92
|
-
creatures[2].color = Yellow;
|
|
93
|
-
creatures[3].color = Blue;
|
|
94
|
-
|
|
95
|
-
pthread_t pids[NCREATURES];
|
|
96
|
-
int i;
|
|
97
|
-
for (i = NCREATURES - 1; i >= 0; i--)
|
|
98
|
-
pthread_create (&pids[i], NULL, run_creature, &creatures[i]);
|
|
99
|
-
|
|
100
|
-
unsigned long sum = 0;
|
|
101
|
-
for (i = NCREATURES - 1; i >= 0; i--) {
|
|
102
|
-
void *result_p;
|
|
103
|
-
pthread_join (pids[i], &result_p);
|
|
104
|
-
sum += *(unsigned long *) result_p;
|
|
105
|
-
}
|
|
106
|
-
return sum;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
int main (int argc, char **argv) {
|
|
110
|
-
meetingsleft = 1e6;
|
|
111
|
-
if (argc > 1) {
|
|
112
|
-
char *tail;
|
|
113
|
-
meetingsleft = strtoul (argv[1], &tail, 0);
|
|
114
|
-
if (tail == argv[1])
|
|
115
|
-
errx (1, "Could not convert \"%s\" to an unsigned long integer", argv[1]);
|
|
116
|
-
}
|
|
117
|
-
unsigned long sum = meetings_of_creatures ();
|
|
118
|
-
printf ("%lu\n", sum);
|
|
119
|
-
return 0;
|
|
120
|
-
}
|
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
/* The Computer Language Benchmarks Game
|
|
2
|
-
http://shootout.alioth.debian.org
|
|
3
|
-
|
|
4
|
-
contributed by Alex Burlyga
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
#include <stdio.h>
|
|
9
|
-
#include <stdlib.h>
|
|
10
|
-
#include <string.h>
|
|
11
|
-
#include <pthread.h>
|
|
12
|
-
#include <semaphore.h>
|
|
13
|
-
|
|
14
|
-
typedef enum _color {
|
|
15
|
-
ZERO = 0,
|
|
16
|
-
BLUE = 1,
|
|
17
|
-
RED = 2,
|
|
18
|
-
YELLOW = 3,
|
|
19
|
-
INVALID = 4,
|
|
20
|
-
} color;
|
|
21
|
-
|
|
22
|
-
char *colors[] = { "zero",
|
|
23
|
-
"blue",
|
|
24
|
-
"red",
|
|
25
|
-
"yellow",
|
|
26
|
-
"invalid"
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
char *digits[] = { "zero", "one", "two", "three", "four", "five",
|
|
30
|
-
"six", "seven", "eight", "nine"
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
sem_t at_most_two;
|
|
34
|
-
sem_t mutex;
|
|
35
|
-
sem_t sem_priv;
|
|
36
|
-
sem_t sem_print;
|
|
37
|
-
|
|
38
|
-
pthread_mutex_t print_mutex;
|
|
39
|
-
|
|
40
|
-
int meetings_left = 0;
|
|
41
|
-
int first_arrived = 0;
|
|
42
|
-
int done = 0;
|
|
43
|
-
|
|
44
|
-
typedef struct _creature {
|
|
45
|
-
color my_color;
|
|
46
|
-
pthread_t id;
|
|
47
|
-
int number_of_meetings;
|
|
48
|
-
} chameos;
|
|
49
|
-
|
|
50
|
-
chameos A;
|
|
51
|
-
chameos B;
|
|
52
|
-
|
|
53
|
-
static color
|
|
54
|
-
compliment_color(color c1, color c2) {
|
|
55
|
-
color result;
|
|
56
|
-
|
|
57
|
-
switch(c1) {
|
|
58
|
-
case BLUE:
|
|
59
|
-
switch(c2) {
|
|
60
|
-
case BLUE:
|
|
61
|
-
result = BLUE;
|
|
62
|
-
break;
|
|
63
|
-
case RED:
|
|
64
|
-
result = YELLOW;
|
|
65
|
-
break;
|
|
66
|
-
case YELLOW:
|
|
67
|
-
result = RED;
|
|
68
|
-
break;
|
|
69
|
-
default:
|
|
70
|
-
printf("error complementing colors: %d, %d\n", c1, c2);
|
|
71
|
-
exit(1);
|
|
72
|
-
}
|
|
73
|
-
break;
|
|
74
|
-
case RED:
|
|
75
|
-
switch(c2) {
|
|
76
|
-
case BLUE:
|
|
77
|
-
result = YELLOW;
|
|
78
|
-
break;
|
|
79
|
-
case RED:
|
|
80
|
-
result = RED;
|
|
81
|
-
break;
|
|
82
|
-
case YELLOW:
|
|
83
|
-
result = BLUE;
|
|
84
|
-
break;
|
|
85
|
-
default:
|
|
86
|
-
printf("error complementing colors: %d, %d\n", c1, c2);
|
|
87
|
-
exit(2);
|
|
88
|
-
}
|
|
89
|
-
break;
|
|
90
|
-
case YELLOW:
|
|
91
|
-
switch(c2) {
|
|
92
|
-
case BLUE:
|
|
93
|
-
result = RED;
|
|
94
|
-
break;
|
|
95
|
-
case RED:
|
|
96
|
-
result = BLUE;
|
|
97
|
-
break;
|
|
98
|
-
case YELLOW:
|
|
99
|
-
result = YELLOW;
|
|
100
|
-
break;
|
|
101
|
-
default:
|
|
102
|
-
printf("error complementing colors: %d, %d\n", c1, c2);
|
|
103
|
-
exit(3);
|
|
104
|
-
}
|
|
105
|
-
break;
|
|
106
|
-
default:
|
|
107
|
-
printf("error complementing colors: %d, %d\n", c1, c2);
|
|
108
|
-
exit(4);
|
|
109
|
-
}
|
|
110
|
-
return result;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
static void
|
|
114
|
-
spell_the_number(int prefix, int number) {
|
|
115
|
-
char *string_number;
|
|
116
|
-
int string_length;
|
|
117
|
-
int i;
|
|
118
|
-
int digit;
|
|
119
|
-
int output_so_far = 0;
|
|
120
|
-
char buff[1024];
|
|
121
|
-
|
|
122
|
-
if(prefix != -1) {
|
|
123
|
-
output_so_far = sprintf(buff, "%d", prefix);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
string_number = malloc(sizeof(char)*10);
|
|
127
|
-
string_length = sprintf(string_number, "%d", number);
|
|
128
|
-
for(i = 0; i < string_length; i++) {
|
|
129
|
-
digit = string_number[i] - '0';
|
|
130
|
-
output_so_far += sprintf(buff+output_so_far, " %s", digits[digit]);
|
|
131
|
-
}
|
|
132
|
-
printf("%s\n",buff);
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
static chameos *
|
|
137
|
-
meeting(chameos c) {
|
|
138
|
-
chameos *other_critter;
|
|
139
|
-
other_critter = malloc(sizeof(chameos));
|
|
140
|
-
|
|
141
|
-
sem_wait(&at_most_two);
|
|
142
|
-
if(done == 1) {
|
|
143
|
-
sem_post(&at_most_two);
|
|
144
|
-
return NULL;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
sem_wait(&mutex);
|
|
148
|
-
if(done == 1) {
|
|
149
|
-
sem_post(&mutex);
|
|
150
|
-
sem_post(&at_most_two);
|
|
151
|
-
return NULL;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if(first_arrived == 0) {
|
|
155
|
-
first_arrived = 1;
|
|
156
|
-
|
|
157
|
-
A.my_color = c.my_color;
|
|
158
|
-
A.id = c.id;
|
|
159
|
-
|
|
160
|
-
sem_post(&mutex);
|
|
161
|
-
sem_wait(&sem_priv);
|
|
162
|
-
|
|
163
|
-
other_critter->my_color = B.my_color;
|
|
164
|
-
other_critter->id = B.id;
|
|
165
|
-
|
|
166
|
-
meetings_left--;
|
|
167
|
-
if(meetings_left == 0) {
|
|
168
|
-
done = 1;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
sem_post(&mutex);
|
|
172
|
-
sem_post(&at_most_two); sem_post(&at_most_two);
|
|
173
|
-
} else {
|
|
174
|
-
first_arrived = 0;
|
|
175
|
-
|
|
176
|
-
B.my_color = c.my_color;
|
|
177
|
-
B.id = c.id;
|
|
178
|
-
|
|
179
|
-
other_critter->my_color = A.my_color;
|
|
180
|
-
other_critter->id = A.id;
|
|
181
|
-
|
|
182
|
-
sem_post(&sem_priv);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
return other_critter;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
static void *
|
|
189
|
-
creature(void *arg) {
|
|
190
|
-
chameos critter;
|
|
191
|
-
critter.my_color = (color)arg;
|
|
192
|
-
critter.id = pthread_self();
|
|
193
|
-
critter.number_of_meetings = 0;
|
|
194
|
-
|
|
195
|
-
chameos *other_critter;
|
|
196
|
-
|
|
197
|
-
int met_others = 0;
|
|
198
|
-
int met_self = 0;
|
|
199
|
-
int *total_meetings = NULL;
|
|
200
|
-
|
|
201
|
-
while(done != 1) {
|
|
202
|
-
other_critter = meeting(critter);
|
|
203
|
-
|
|
204
|
-
if(other_critter == NULL) {
|
|
205
|
-
break;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
if(critter.id == other_critter->id) {
|
|
209
|
-
met_self++;
|
|
210
|
-
}else{
|
|
211
|
-
met_others++;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
critter.my_color = compliment_color(critter.my_color, other_critter->my_color);
|
|
215
|
-
free(other_critter);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
sem_wait(&sem_print);
|
|
219
|
-
pthread_mutex_lock(&print_mutex);
|
|
220
|
-
spell_the_number(met_others + met_self, met_self);
|
|
221
|
-
pthread_mutex_unlock(&print_mutex);
|
|
222
|
-
|
|
223
|
-
total_meetings = malloc(sizeof(int));
|
|
224
|
-
*total_meetings =met_others + met_self;
|
|
225
|
-
|
|
226
|
-
pthread_exit((void *)total_meetings);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
void
|
|
230
|
-
print_colors(void) {
|
|
231
|
-
int i, j;
|
|
232
|
-
color c;
|
|
233
|
-
|
|
234
|
-
for(i = 1; i < INVALID; i++) {
|
|
235
|
-
for(j = 1; j < INVALID; j++) {
|
|
236
|
-
c = compliment_color(i,j);
|
|
237
|
-
printf("%s + %s -> %s\n",colors[i],colors[j], colors[c]);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
printf("\n");
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
#define NUMBER1 3
|
|
245
|
-
#define NUMBER2 10
|
|
246
|
-
|
|
247
|
-
void
|
|
248
|
-
run_the_meetings(color *starting_colors, int n_colors, int total_meetings_to_run) {
|
|
249
|
-
struct sched_param priority;
|
|
250
|
-
priority.sched_priority = 1;
|
|
251
|
-
|
|
252
|
-
pthread_t pid_tab[NUMBER2];
|
|
253
|
-
memset(pid_tab, 0, sizeof(pthread_t)*NUMBER2);
|
|
254
|
-
|
|
255
|
-
int i;
|
|
256
|
-
int total = 0;
|
|
257
|
-
void *rslt = NULL;
|
|
258
|
-
|
|
259
|
-
sem_init(&at_most_two, 0, 2);
|
|
260
|
-
sem_init(&mutex, 0, 1);
|
|
261
|
-
sem_init(&sem_priv, 0, 0);
|
|
262
|
-
sem_init(&sem_print, 0, 0);
|
|
263
|
-
|
|
264
|
-
pthread_mutex_init(&print_mutex, NULL);
|
|
265
|
-
|
|
266
|
-
meetings_left = total_meetings_to_run;
|
|
267
|
-
first_arrived = 0;
|
|
268
|
-
done = 0;
|
|
269
|
-
|
|
270
|
-
sched_setscheduler(0, SCHED_FIFO, &priority);
|
|
271
|
-
|
|
272
|
-
for(i = 0; i < n_colors; i++) {
|
|
273
|
-
printf(" %s", colors[starting_colors[i]]);
|
|
274
|
-
pthread_create(&pid_tab[i], NULL, &creature, (void *)starting_colors[i]);
|
|
275
|
-
}
|
|
276
|
-
printf("\n");
|
|
277
|
-
for(i = 0; i < n_colors; i++) {
|
|
278
|
-
sem_post(&sem_print);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
for(i = 0; i < n_colors; i++) {
|
|
282
|
-
pthread_join(pid_tab[i], &rslt);
|
|
283
|
-
total += *(int *)rslt;
|
|
284
|
-
free(rslt);
|
|
285
|
-
}
|
|
286
|
-
spell_the_number(-1, total);
|
|
287
|
-
printf("\n");
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
int
|
|
291
|
-
main(int argc, char **argv) {
|
|
292
|
-
color first_generation[NUMBER1] = { BLUE, RED, YELLOW };
|
|
293
|
-
color second_generation[NUMBER2] = {BLUE, RED, YELLOW, RED, YELLOW,
|
|
294
|
-
BLUE, RED, YELLOW, RED, BLUE};
|
|
295
|
-
int number_of_meetings_to_run = 600;
|
|
296
|
-
|
|
297
|
-
if(argc > 1) {
|
|
298
|
-
number_of_meetings_to_run = strtol(argv[1], NULL, 10);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
print_colors();
|
|
302
|
-
run_the_meetings(first_generation, NUMBER1, number_of_meetings_to_run);
|
|
303
|
-
run_the_meetings(second_generation, NUMBER2, number_of_meetings_to_run);
|
|
304
|
-
|
|
305
|
-
return 0;
|
|
306
|
-
}
|