170 похожих чатов

Вообщем есть такая задача. Есть два потока. Первый поток слушает

запросы с клиента, и если клиент присылает сообщение, то первый поток должен отправить второму потоку "либо что". Второй поток делает вычисления и выделяет память. Таким образом если второй поток получил это "либо что", то он должен остановить выполнение текущей задачи, освободить память и вернуть ноль.
Под словосочетанием "либо что", подразумеваю сигнал или сообщение или просто число.
П.С.
Пробывал это сделать через установку обработчика сигнала во втором потоке, а с первого потока кидать этот сигнал. Но выходит что обработать сигнал может любой поток, либо я что-то не так сделал. Как наиболее эфективно это сделать ?

4 ответов

5 просмотров

Ты можешь проверять - может ли текущий поток обработать сигнал

>остановить В неконсистентном состоянии?

Потом

Какая-то очень странная схема работы. Не понятно, зачем такое. Ну ок, допустим, надо. Допустим, шиза. Это асинхронное взаимодействие первого потока со вторым, расчетным. Очевидно, что расчетный не может в произвольный момент просто взять и встать. Тогда, первый поток должен послать второму "сигнал" и далее есть два варианта: либо запросный поток должен синхронно сообщить о результате выполнения расчетного, либо асинхронно. Если второе, то вообще легко, он пишет клиенту что-то типа " все понял, расчёт будет остановлен и вам сообщат" (или не сообщат, если клиенту это не нужно). Тогда запросный поток просто шлёт расчётному "сигнал" и забывает. Первый вариант же означает, что нужно дождаться от расчетного ответного "сигнала 2" и только после этого выдать клиенту сообщение типа "Товарищь генерал, расчет остановлен, результат такой-то". Это было бы очень странно, ибо клиент должен послать запрос и ждать долго долго ответ. Но если надо, значит ок. Генерал все же... Технически это реализуется достаточно просто, оба сигнала 1 и 2 одинаковые, это либо event-ы, если это платформноориентированный код, либо эвенты из STD Threads, они делаются на atomic-что-то. atomic_flag или ещё что-то. В любом случае схема шиза полная.

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
@ahndmn @ayaw0_0 здарова, на чем пишете?
Aiwan \ (•◡•) / _bot
7
Коллеги, как получить PId для собственного процесса из под линукса?
Роман Лях (rgreat)
6
Карта сайта