Отправить сообщение из pthread в основной поток

#c #stack

#c #стек

Вопрос:

Рассмотрим следующий код :

 #include <stdio.h>
#include <pthread.h>
#include <signal.h>

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
;
pthread_mutex_t mutex;
void *camera_function(void *arg)
{
    int picture[4096][4096];
    pthread_mutex_lock(amp;mutex);
    int cnum = *(int *)arg;

    for (;;)
    {
      bool suspicious = true;
       if(suspicious)
          // send message to the parent process
         sleep(S);
    }
    pthread_mutex_unlock(amp;mutex);
}
// Security process
//This will call the camera function
int main()
{
    int N = 10, S = 10;
    pthread_t CameraPids[10];

    for (int i = 0; i < N; i  )
    {
        int cnum = i;
        pthread_create(amp;CameraPids[i], NULL, camera_function, (void *)amp;cnum);
    }
    return 0;
}
 

В приведенном выше есть комментарий // отправить сообщение родительскому процессу
Что я хочу сделать, это отправить некоторое сообщение родительскому процессу, который в данном случае является основной функцией. И основная функция должна напечатать это сообщение, как мне этого добиться?

Комментарии:

1. Может ли это быть какой-то сигнал, который мы можем отправить родительскому процессу? И если этот сигнал получен, родительский процесс обрабатывает его

2. В вашем цикле suspicious инициализируется true при каждом взаимодействии цикла. Таким образом, вы будете бесконечно зацикливаться. Вы вообще не используете свою cond переменную. Что вы подразумеваете под «отправить сообщение»? Вы имеете в виду msgsnd/msgrcv ? Или вы хотите поместить некоторые данные в общий буфер, закрытый переменной mutex и cond?

3. Это правда, я просто поместил его как фиктивный код. Потому что основное намерение состоит в том, чтобы созданные потоки могли взаимодействовать с функцией / процессом main(). Итак, скажите suspective = function_Call(), а затем, если он возвращает true, отправьте сигнал основному процессу. Это может быть что угодно signal / msgsnd . Я хочу, чтобы suspective= true тогда основной метод должен вывести сообщение ** обнаружена уязвимость**