Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #define NUMB 1000 // 100 liczb losowych
- #define GENERATING_THREADS_NUMBER 2
- #define SORTING_THREADS_NUMBER 10
- #include <stdio.h>
- #include <stdlib.h>
- #include <Windows.h>
- #include <time.h>
- HANDLE Threads_for_generating[GENERATING_THREADS_NUMBER];
- HANDLE Threads_for_sorting[SORTING_THREADS_NUMBER];
- CRITICAL_SECTION g_Section;
- int generating_count = 0;
- // 1) Generator liczb losowych na 2 wątkach(zapis do pliku, 100 liczb, przedział{ x:0 < x <= 1000 } (2 pkt)
- // 2) Sortowanie wygenerowanych liczb z zadania 1 na 10 wątkach.
- // Poprzez odpowiednie rozdzielenie tablicy na wątki oraz odpowiednie scalenie wyników w wątku głównym(3ptk).
- int generator() {
- int num = rand() % 1000 + 1;
- return num;
- }
- DWORD WINAPI GenerateNumbers(FILE* numbers) {
- srand((unsigned)time(NULL));
- while (1) {
- int num = generator();
- if (generating_count <= NUMB) {
- EnterCriticalSection(&g_Section); // początek sekcji krytycznej
- fprintf(numbers, "%d\n", num);
- generating_count++;
- LeaveCriticalSection(&g_Section);
- }
- else break;
- }
- }
- HANDLE ThreadedGenerateNumbers(FILE* numbers) {
- DWORD ThreadId;
- for (int i = 0; i < 2; i++) {
- Threads_for_generating[i] = CreateThread(NULL, 0, GenerateNumbers, numbers, 0, &ThreadId);
- if (Threads_for_generating[i] != INVALID_HANDLE_VALUE) {
- printf("Wantek id: %d\n", ThreadId);
- }
- }
- return 0;
- }
- int main() {
- FILE* numbers_file;
- numbers_file = fopen("numbers.txt", "w");
- //for (int i = 0; i < NUMB; i++) {
- // int num = rand() % 1000 + 1;
- // fprintf(numbers_file, "%d\n", num);
- //}
- InitializeCriticalSection(&g_Section);
- ThreadedGenerateNumbers(numbers_file);
- fclose(numbers_file);
- printf("%d\n", generating_count);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement