Β return (ClockCycles() - tb) * 1000 / cps;
}
const int MSGLEN = 80;
// ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°:
void* server(void* chid) {
Β int rcvid;
Β char message[MSGLEN];
Β while (true) {
Β rcvid = MsgReceive((int)chid, message, MSGLEN, NULL);
Β sprintf(message + strlen(message), "[%07llu] ... ", mark());
Β delay(TEMP); // ΠΈΠΌΠΈΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ
Β sprintf(message + strlen(message), [%07llu]->", mark());
Β MsgReply(rcvid, EOK, message, strlen(message) + 1);
Β }
Β return NULL;
}
// ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°:
void* client(void* data) {
Β while (true) {
Β char message[MSGLEN];
Β sprintf(message, "%d:\t[%07llu]->", pthread_self(), mark());
Β MsgSend((int)data, message, strlen(message) + 1, message, MSGLEN);
Β sprintf(message + strlen(message), "[%07llu]", mark());
Β cout << message << endl;
Β static unsigned int seed = 0;
Β delay(numclient*(((long)rand_r(&seed ) * TEMP / RAND_MAX) + TEMP));
Β // ΠΈΠΌΠΈΡΠ°ΡΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ...
Β }
Β return NULL;
}
int main(int argc, char** argv) {
Β // 1-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ - ΡΠΈΡΠ»ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²:
Β if (argc > 1 && atoi(argv[1]) > 0)
Β numclient = atoi(argv[1]);
Β tb = ClockCycles();
Β int chid = ChannelCreate(0);
Β if (pthread_create(NULL, NULL, server, (void*)chid) != EOK)
Β perror("server create"), exit(EXIT_FAILURE);
Β for (int i = 0; i < numclient; i++)
Β if (pthread_create(NULL, NULL, client,
Β Β (void*)ConnectAttach(0, 0, chid, _NTO_SIDE_CHANNEL, 0)) != EOK)
Β Β perror("client create"), exit(EXIT_FAILURE);
Β sigpause(SIGINT);
Β return EXIT_SUCCESS;
}ΠΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°:
β’Β Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π½Π° Π½ΠΈΡ .
β’Β Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ N ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² (Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ), ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ.
β’Β Π ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ N ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².
β’Β ΠΠ°Π½Π°Π» ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ (Ρ.e. Π²Π½Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ); ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ Π² ΠΏΠΎΡΠΎΠΊΠΈ (ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²) ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΡΡΠΊ Ρ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΎΠΉ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅).
β’Β Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡ; Π² Ρ ΠΎΠ΄Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ°ΡΡΠ°Π΅Ρ: ΠΎΠ½ΠΎ ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠ΅ΠΉ ΠΏΠΎΠ»Π΅ΠΉ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΡΠ½ΠΎΠ²Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ.
β’Β Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΠ΅Π»Π΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ 5 ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉΒ β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (ΠΎΠ±ΡΠ°ΡΠ°ΡΡΠ΅Π³ΠΎΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ) ΠΈ 4 Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ (Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ ): ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ (Π½Π°ΡΠ°Π»ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ), ΠΎΡΠ²Π΅ΡΠ° Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ (ΠΊΠΎΠ½Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ), ΠΏΡΠΈΠ΅ΠΌΠ° ΠΎΡΠ²Π΅ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ.
ΠΠ°ΠΏΡΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
# n1 5Π ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ, ΠΏΠΎΠ½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ) Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
pidin
5546027 1 ./n1Β 10r SIGSUSPEND
5546027 2 ./n1Β 10r NANOSLEEP
5546027 3 ./n1Β 10r NANOSLEEP
5546027 4 ./n1Β 10r SENDΒ Β Β Β Β Β 5546027
5546027 5 ./n1Β 10r REPLYΒ Β Β Β Β 5546027
5546027 6 ./n1Β 10r NANOSLEEP
5546027 7 ./n1Β 10r NANOSLEEP
5730347 1 ./n1Β 10r SIGSUSPEND
5730347 2 ./n1Β 10r RECEIVE 1
5730347 3 ./n1Β 10r NANOSLEEP
5730347 4 ./n1Β 10r NANOSLEEP
5730347 5 ./n1Β 10r NANOSLEEP
5730347 6 ./n1Β 10r NANOSLEEP
5730347 7 ./n1Β 10r NANOSLEEPΠ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π½Π° ΠΌΠ΅Π½ΡΡΠ΅ΠΌ ΡΠΈΡΠ»Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ Π»Π΅Π³ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ):
# n1 3
3: [0000000]->[0000000] ... [0000501]->[0000501]
4: [0000000]->[0000501] ... [0001003]->[0001003]
5: [0000000]->[0001003] ... [0001505]->[0001505]
3: [0002003]->[0002003] ... [0002504]->[0002505]
5: [0003462]->[0003462] ... [0003964]->[0003964]
4: [0003485]->[0003964] ... [0004466]->[0004466]
3: [0005017]->[0005017] ... [0005518]->[0005518]
5: [0005624]->[0005624] ... [0006126]->[0006126]
4: [0006741]->[0006741] ... [0007243]->[0007243]