Читаем Programming with POSIX® Threads полностью

33 while (crew->work_count == 0) {

34  status = pthread_cond_wait (&crew->go, &crew->mutex);

35  if (status != 0)

36  err_abort (status, "Wait for go");

37 }

38

39 status = pthread_mutex_unlock (&crew->mutex);

40 if (status != 0)

41  err_abort (status, "Unlock mutex");

42

43 DPRINTF (("Crew %d starting\n", mine->index));

44

45 /*

46 * Now, as long as there's work, keep doing it.

47 */

48 while (1) {

49 /*

50 * Wait while there is nothing to do, and

51 * the hope of something coming along later. If

52 * crew->first is NULL, there's no work. But if

53 * crew->work_count goes to zero, we're done.

54 */

55  status = pthread_mutex_lock (&crew->mutex);

56  if (status != 0)

57  err_abort (status, "Lock crew mutex");

58

59  DPRINTF (("Crew %d top: first is %#lx, count is %d\n",

60  mine->index, crew->first, crew->work_count));

61  while (crew->first == NULL) {

62  status = pthread_cond_wait (&crew->go, &crew->mutex);

63  if (status != 0)

64  err_abort (status, "Wait for work");

65  }

66

67  DPRINTF (("Crew %d woke: %#lx, %d\n",

68  mine->index, crew->first, crew->work_count));

69

70 /*

71 * Remove and process a work item.

72 */

73  work = crew->first;

74  crew->first = work->next;

75  if (crew->first == NULL)

76  crew->last = NULL;

77

78  DPRINTF (("Crew %d took %#lx, leaves first %#lx, last %#lx\n",

79  mine->index, work, crew->first, crew->last));

80

81  status = pthread_mutex_unlock (&crew->mutex);

82  if (status != 0)

83  err_abort (status, "Unlock mutex");

84

85 /*

86 * We have a work item. Process it, which may involve

87 * queuing new work items.

88 */

89  status = lstat (work->path, &filestat);

90

91  if (S_ISLNK (filestat.st_mode))

92  printf (

93  "Thread %d: %s is a link, skipping.\n",

94  mine->index,

95  work->path);

96  else if (S_ISDIR (filestat.st_mode)) {

97  DIR *directory;

98  struct dirent *result;

99

100 /*

101 * If the file is a directory, search it and place

102 * all files onto the queue as new work items.

103 */

104  directory = opendir (work->path);

105  if (directory == NULL) {

106  fprintf (

107  stderr, "Unable to open directory %s: %d (%s)\n",

108  work->path,

109  errno, strerror (errno));

110  continue;

111  }

112

113  while (1) {

114  status = readdir_r (directory, entry, &result);

115  if (status != 0) {

116  fprintf (

117  stderr,

118  "Unable to read directory %s: %d (%s)\n",

119  work->path,

120  status, strerror (status));

121  break;

122  }

123  if (result == NULL)

124  break; /* End of directory */

125

126 /*

127 * Ignore "." and entries.

128 */

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных

Все жанры