Advertisement
Guest User

Untitled

a guest
Apr 1st, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 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. srand((unsigned)time(NULL));
  29. while (1) {
  30. int num = generator();
  31. if (generating_count <= NUMB) {
  32. EnterCriticalSection(&g_Section); // początek sekcji krytycznej
  33. fprintf(numbers, "%d\n", num);
  34. generating_count++;
  35. LeaveCriticalSection(&g_Section);
  36. }
  37. else break;
  38. }
  39. }
  40.  
  41. HANDLE ThreadedGenerateNumbers(FILE* numbers) {
  42. DWORD ThreadId;
  43. for (int i = 0; i < 2; i++) {
  44. Threads_for_generating[i] = CreateThread(NULL, 0, GenerateNumbers, numbers, 0, &ThreadId);
  45. if (Threads_for_generating[i] != INVALID_HANDLE_VALUE) {
  46. printf("Wantek id: %d\n", ThreadId);
  47. }
  48. }
  49. return 0;
  50. }
  51.  
  52.  
  53. int main() {
  54. FILE* numbers_file;
  55. numbers_file = fopen("numbers.txt", "w");
  56.  
  57. //for (int i = 0; i < NUMB; i++) {
  58. // int num = rand() % 1000 + 1;
  59. // fprintf(numbers_file, "%d\n", num);
  60. //}
  61. InitializeCriticalSection(&g_Section);
  62. ThreadedGenerateNumbers(numbers_file);
  63. fclose(numbers_file);
  64. printf("%d\n", generating_count);
  65.  
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement