Advertisement
Guest User

Untitled

a guest
Apr 1st, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #define NUMB 1000 // 100 liczb losowych
  3. #define GENERATING_THREADS_NUMBER 2
  4. #define SORTING_THREADS_NUMBER 10
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <Windows.h>
  8. #include <time.h>
  9.  
  10. HANDLE Threads_for_generating[GENERATING_THREADS_NUMBER];
  11. HANDLE Threads_for_sorting[SORTING_THREADS_NUMBER];
  12.  
  13. CRITICAL_SECTION g_Section;
  14.  
  15. int generating_count = 0;
  16.  
  17. // 1) Generator liczb losowych na 2 wątkach(zapis do pliku, 100 liczb, przedział{ x:0 < x <= 1000 } (2 pkt)
  18.  
  19. // 2) Sortowanie wygenerowanych liczb z zadania 1 na 10 wątkach.
  20. // Poprzez odpowiednie rozdzielenie tablicy na wątki oraz odpowiednie scalenie wyników w wątku głównym(3ptk).
  21.  
  22. int generator() {
  23. int num = rand() % 1000 + 1;
  24. return num;
  25. }
  26.  
  27. DWORD WINAPI GenerateNumbers(FILE* numbers) {
  28. while (1) {
  29. if (generating_count < NUMB) {
  30. EnterCriticalSection(&g_Section); // początek sekcji krytycznej
  31. int num = generator();
  32. fprintf(numbers, "%d\n", num);
  33. generating_count++;
  34. LeaveCriticalSection(&g_Section);
  35. }
  36. else break;
  37. }
  38. }
  39.  
  40. HANDLE ThreadedGenerateNumbers(FILE* numbers) {
  41. DWORD ThreadId;
  42. for (int i = 0; i < 2; i++) {
  43. Threads_for_generating[i] = CreateThread(NULL, 0, GenerateNumbers, numbers, 0, &ThreadId);
  44. }
  45. WaitForMultipleObjects(2, Threads_for_generating, 1, INFINITE);
  46. return 0;
  47. }
  48.  
  49.  
  50. int main() {
  51. srand((unsigned)time(NULL));
  52. FILE* numbers_file;
  53. numbers_file = fopen("numbers.txt", "w");
  54.  
  55. //for (int i = 0; i < NUMB; i++) {
  56. // int num = rand() % 1000 + 1;
  57. // fprintf(numbers_file, "%d\n", num);
  58. //}
  59. InitializeCriticalSection(&g_Section);
  60. ThreadedGenerateNumbers(numbers_file);
  61. fclose(numbers_file);
  62. printf("%d\n", generating_count);
  63. system("pause");
  64. return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement