The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"clone() и malloc()"
Отправлено nikolayshm, 11-Янв-12 13:30 
Прошу помощи у знающих людей.

Создаю процессы с помощью clone() с флагами: CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD | CLONE_SYSVSEM.
Если добавить флаг CLONE_THREAD, то все работает нормально, но этот флаш не нужен.

При этом когда они начиют конкурировать между собой, возникает deadlock в функциях malloc()/free()

используется clone(), а не fork() потому что в приложении нужно шарить очень много данных.
используется clone(), а не pthread_create() потому что при смерти треда (seg fault) завершается сразу все приложение.
То есть хочется что бы и процессы между собой все делили, и при этом были независимы друг от друга в случае смерти.
В функциях glibc есть внутренние блокировки, непонятно только почему они заходят в deadlock.


Код для демонстрации:

int func(void *p)
{
    while (1) {
        p = (char *)malloc(6);
        memcpy(p, "12345\0", 5);
        free(p);
    }
}

#define     STACK_SIZE 1024*1024

int main()
{
    int i;
                                            
    for (i=0; i<10; i++) {
        void *stack = malloc(STACK_SIZE);
        int flags = CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD | CLONE_SYSVSEM;
        int id = clone(func, (char *)stack + STACK_SIZE, flags, NULL);
    }

    sleep(10000);

    return 0;
}

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру