LINUX.ORG.RU

История изменений

Исправление xaizek, (текущая версия) :

Но может с musl всё проще чем мне кажется.

Загрузка/линковка двух libc в один процесс ни к чему хорошему не приведёт (на SO), при везении оно даже не сразу упадёт, но рано или поздно это произойдёт. Реализации libc предполагают, что все функции/данные их и если одна libc получит данные от другой, то быть беде.

Тогда почему бы и не заюзать threads.h )

Там похоже лишь косметические изменения по сравнению с pthreads, в том же musl практически всё просто заворачивается на pthreads.

Общий совет: использовать glibc, а не musl. Я знаю исходники musl и как-то не доверяю людям, которые говорят, что у них мега-читабельные исходники, а у glibc всё сложно, а сами пишут такое:

			if (0) {
		case 'o':
			a = fmt_o(arg.i, z);
			if ((fl&ALT_FORM) && p<z-a+1) p=z-a+1;
			} if (0) {
		case 'd': case 'i':
	if (((uintptr_t)s & ALIGN) == ((uintptr_t)d & ALIGN)) {
		for (; ((uintptr_t)s & ALIGN) && n && (*d=*s)!=c; n--, s++, d++);
		if ((uintptr_t)s & ALIGN) goto tail;
		k = ONES * c;
		wd=(void *)d; ws=(const void *)s;
		for (; n>=sizeof(size_t) && !HASZERO(*ws^k);
		       n-=sizeof(size_t), ws++, wd++) *wd = *ws;
		d=(void *)wd; s=(const void *)ws;
	}
	for (; n && (*d=*s)!=c; n--, s++, d++);
У glibc также намного больше тестов.

Исходная версия xaizek, :

Но может с musl всё проще чем мне кажется.

Загрузка/линковка двух libc в один процесс ни к чему хорошему не приведёт (на SO), при везении оно даже не сразу упадёт, но рано или поздно это произойдёт. Реализации libc предполагают, что все функции/данные их и если одна libc получит данные от другой, то быть беде.

Тогда почему бы и не заюзать threads.h )

Там похоже лишь косметические изменения по сравнению с pthreads, в том же musl практически всё просто заворачивается на pthreads.

Общий совет: использовать glibc, а не musl. Я знаю исходники musl и как-то не доверяю людям которые говорят, что у них мега-читабельные исходники, а у glibc всё сложно, а сами пишут такое:

			if (0) {
		case 'o':
			a = fmt_o(arg.i, z);
			if ((fl&ALT_FORM) && p<z-a+1) p=z-a+1;
			} if (0) {
		case 'd': case 'i':
	if (((uintptr_t)s & ALIGN) == ((uintptr_t)d & ALIGN)) {
		for (; ((uintptr_t)s & ALIGN) && n && (*d=*s)!=c; n--, s++, d++);
		if ((uintptr_t)s & ALIGN) goto tail;
		k = ONES * c;
		wd=(void *)d; ws=(const void *)s;
		for (; n>=sizeof(size_t) && !HASZERO(*ws^k);
		       n-=sizeof(size_t), ws++, wd++) *wd = *ws;
		d=(void *)wd; s=(const void *)ws;
	}
	for (; n && (*d=*s)!=c; n--, s++, d++);
У glibc также намного больше тестов.