1. Си / Говнокод #1596

    +136

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    #include <stdio.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <math.h>
    #include <stdlib.h>
    
    struct thread_arg
    {
    	int a;
    	int b;
    	int c;
    	double d;
    };
    	
    
    void *ret_x1(void *arg)
    {
    		
    	struct thread_arg targ = *(struct thread_arg *)arg;
    	double x1;
    	x1 = (-targ.b + sqrt(targ.d)) / (2*targ.a);
    
    	fprintf(stderr, "x1 = %f\n", x1);
    
    	return NULL;
    }
    
    void *ret_x2(void *arg)
    {
    	struct thread_arg targ = *(struct thread_arg*)arg;
    	double x2;
    	x2 = (-targ.b - sqrt(targ.d)) / (2*targ.a);
    
    	
    
    	fprintf(stderr, "x2 = %f\n", x2);
    	
    	return NULL;
    }
    
    int main(void)
    {
    	pthread_t thread1, thread2;
    	struct thread_arg args;
    
    	fprintf(stderr, "Enter a, b and c\n");
    	scanf("%d %d %d", &args.a, &args.b, &args.c);
    	
    	args.d = args.b*args.b - 4*args.a*args.c;
    
    	if(args.d < 0)
    	{
    		fprintf(stderr,"There is no roots\n");
    		return 0;
    	}
    	else
    	{
    		if(pthread_create(&thread1, NULL, &ret_x1, &args) != 0)
    		{
    			fprintf(stderr, "Error1\n");
    			return 1;
    		}
    		if(pthread_create(&thread2, NULL, &ret_x2, &args) != 0)
    		{
    			fprintf(stderr, "Error2\n");
    			return 1;
    		}
    		pthread_join(thread1, NULL);
    		pthread_join(thread2, NULL);
    
    	}
    	return 0;
    		
    }

    Многопоточное решение квадратного уравнения...

    Запостил: zitzy, 16 Августа 2009

    Комментарии (11) RSS

    • Эт скорее чистка улиц ядерным оружием
      Ответить
      • Очень похоже. Я, кстати, сразу так и подумал.
        Ответить
      • Не. Ядерным - посчитать это на CUDA/OpenCL.
        Ответить
        • Тонко.
          Ответить
        • Сразу представил как 16 дворников на 16 параллельных улицах синхронно метут мостовую
          Ответить
          • И даже если у тебя одна улица - дворников один хрен будет 16.
            Ответить
            • И они будут мести хрен пойми что через равные расстояния друг от друга...
              А если один из них удариться головой об здание, то все упадут. Поэтому что бы подмести улицу нужно 15 остальных приковать к месту старта цепями и костылями
              Ответить
    • Научитесь писать так:

      typedef struct _thread_arg thread_arg;
      struct _thread_arg
      {
      int a;
      int b;
      int c;
      double d;
      };

      И ваш код волшебно уменьшится в два раза.
      Ответить
      • или по-вендозному: typedef struct tag_thread_arg{ /*...*/ } thread_arg, *thread_arg_ptr;
        Ответить
        • Ну тогда уж typedef struct _THREAD_ARG { ...} THREAD_ARG, *PTHREAD_ARG
          чтобы совсем повиндовому =)
          Ответить

    Добавить комментарий