Содержание
- 2. Виды параллелизма. Общая память Распределенная память
- 3. Средства параллельного программирования
- 4. Треды Тредами (потоки, лекговесные процессы) называются параллельно выполняющиеся потоки управления в адресном пространстве одного процесса.
- 5. Треды и процессы обмен через общую память обмен через посылку сообщений
- 6. Различие тредов и процессов Различные треды выполняются в одном адресном пространстве. Различные процессы выполняются в разных
- 7. Средства многопоточного программирования Треды поддерживаются практически всеми современными операционными системами. Средства для многопоточного программирования встроены в
- 8. Создание и завершение тредов int pthread_create ( pthread_t * outHandle, pthread_attr_t *inAttribute, void *(*inFunction)(void *), void
- 9. Создание треда int pthread_create ( pthread_t * outHandle, pthread_attr_t *inAttribute, void *(*inFunction)(void *), void *inArg); outHandle
- 10. Завершение треда void pthread_exit(void *inReturnValue) Вызов этой функции приводит к завершению треда. Процесс-родитель получает указатель в
- 11. Обработка завершения треда на треде-родителе int pthread_join( pthread_t inHandle, void **outReturnValue); Вызов этой функции приводит к
- 12. Пример: вычисление определенного интеграла y = f(x) a b xi xi+1 Si xi-1
- 13. #include #include #include double a = 0.0, b = 1.0, h, *r; int numt, n; double
- 14. void* worker(void* addr) { int my, i; double s, p; my = *(int*)addr; s = 0.0;
- 15. main(int arc, char* argv[]) { int i; double S; pthread_t *threads; numt = atoi(argv[1]); n =
- 16. Проблема недетерминизма Программа называется недетерминированной, если при одних и тех же входных данных она может демонстрировать
- 17. a read write increment read increment write a = a + 1 a = a +
- 18. a read write increment read increment write a = a + 1 a = a +
- 19. a:=a+1 a:=a+1 a=0 a=2 Неделимой называется операция, в момент выполнения которой состояние общих переменных не может
- 20. Семафоры Семафорами называются общие переменные, которые принимают неотрицательные значение целого типа для работы с которыми предусмотрены
- 21. Поддержка семафоров в библиотеке pthreads sem_t – тип семафора sem_init(sem_t* semaphor, int flag, int value) semaphor
- 22. Кольцевой буфер front rear producer consumer
- 23. #include #include #include #include #include #define N 3 static int buf[N]; static int rear; static int
- 24. void process(int number) { sleep(number); } void * consumer (void *arg) { int i = 0;
- 25. void * producer (void *arg) { int i; i = 0; while (i != -1) {
- 26. main (int argc, char *argv[]) { pthread_t pt; pthread_t ct; init (); pthread_create (&pt, NULL, producer,
- 27. Критические секции Критической секцией называется фрагмент кода программы, который может одновременно выполнятся только одним тредом.
- 28. Пример: создание неделимой опреации 1-й тред: a = a + 1 2-й тред: a = a
- 29. 1-й тред: while(true) { while(in2); in1 = true; a = a + 1; in1 = false;
- 30. Поддержка критических секций в pthreads «Мютекс» - mutex – mutual exclusion (взаимное исключение); Объявление и инициализация:
- 31. Пример: умножение матриц C C = A * B каждый тред вычисляет свою строку матрицы
- 32. Умножение матриц: код программы #include #include #include pthread_mutex_t mut; static int N, nrow; static double *A,
- 33. void setup_matrices () { int i, j; A = malloc (N * N * sizeof (double));
- 34. void * worker (void *arg) { int i, j; while (nrow { int oldrow; pthread_mutex_lock (&mut);
- 35. for (i = 0; i { int j; double t = 0.0; for (j = 0;
- 36. main (int argc, char *argv[]) { int i, nthreads; pthread_t *threads; pthread_mutex_init(&mut, NULL); nthreads = atoi
- 38. Скачать презентацию