This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
os_cp:2024:prog_assignment [2024/05/16 00:24] jkonczak utworzono |
os_cp:2024:prog_assignment [2024/06/06 01:38] (current) jkonczak |
||
|---|---|---|---|
| Line 18: | Line 18: | ||
| redundancy will lower the grade. | redundancy will lower the grade. | ||
| - | The deadline for the assignment is **02.06.2024** (AoE). Please send the | + | The deadline for the assignment is 02.06.2024 (AoE). Please send the |
| solutions to me as an attachment to an e-mail message with the subject | solutions to me as an attachment to an e-mail message with the subject | ||
| beginning with ''[OSCP]''. | beginning with ''[OSCP]''. | ||
| + | |||
| + | **The tests that I used to tell if your code behaves as expected are available [[https://www.cs.put.poznan.pl/jkonczak/misc/oscp-prog-check.tar.xz|here]].** | ||
| <code c header.h> | <code c header.h> | ||
| Line 70: | Line 72: | ||
| * The identifiers shall be consecutive numbers starting from 0. | * The identifiers shall be consecutive numbers starting from 0. | ||
| * Identifier 0 must always be the main thread. | * Identifier 0 must always be the main thread. | ||
| + | * | ||
| + | * (clarification added on 28 May) thread identifiers must not be | ||
| + | * reused; when a thread with an identifier ID terminates, no new | ||
| + | * thread may get the identifier ID. | ||
| * | * | ||
| * Each thread must have a message queue in that at most | * Each thread must have a message queue in that at most | ||
| Line 181: | Line 187: | ||
| <code c> | <code c> | ||
| #include "header.h" | #include "header.h" | ||
| + | #include <stdatomic.h> | ||
| #include <stdint.h> | #include <stdint.h> | ||
| #include <stdio.h> | #include <stdio.h> | ||
| Line 187: | Line 194: | ||
| struct thread_msg{ | struct thread_msg{ | ||
| - | int uc; | + | atomic_int uc; |
| char * txt; | char * txt; | ||
| }; | }; | ||
| Line 252: | Line 259: | ||
| thread_gather(senders, 2, msgs); | thread_gather(senders, 2, msgs); | ||
| printf("%s%s\n", msgs[0]->txt, msgs[1]->txt); | printf("%s%s\n", msgs[0]->txt, msgs[1]->txt); | ||
| + | thread_msg_dec_use_count(msgs[0]); | ||
| + | thread_msg_dec_use_count(msgs[1]); | ||
| | | ||
| // send a message to the main thread | // send a message to the main thread | ||
| Line 277: | Line 286: | ||
| void thread_msg_dec_use_count(thread_msg* msg){ | void thread_msg_dec_use_count(thread_msg* msg){ | ||
| - | if(!msg->uc--){ | + | if(!--msg->uc){ |
| free(msg->txt); | free(msg->txt); | ||
| free(msg); | free(msg); | ||