سؤال

وسي العمومية لديه semtimedop الطريقة التي تسمح لك لتنفيذ عملية (<م> لاكتساب إشارة في هذه الحالة ) التي انقضت مهلة بعد فترة معينة من الزمن. كما يوفر Win32 وWaitForSingleObject التي تنص على تعدد الوظائف مماثلة.

وبقدر ما أستطيع أن أرى ليس هناك ما يعادلها على OSX أو غيرها من Unices. يمكنك توحي إما ما يعادل لsemtimedop أو حلا لإنهاء semop بعد فترة معينة من الزمن نظيفة.

هل كانت مفيدة؟

المحلول

ويمكنك الخروج من مكالمة semop() (ومعظم المكالمات حجب أخرى) عن طريق الحصول على إشارة، مثل واحد الناجمة عن alarm().

والمثال لم تختبر:

#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

volatile int alarm_triggered = 0;
void alarm_handler(int sig)
{
    alarm_triggered = 1;
}

int main(int argc, char **argv)
{
    int rc;
    /* set up signal handler */
    signal(SIGALRM, alarm_handler);

    /* ... */
    alarm(30); /* 30 second timeout */
    rc = semop(...);
    if (rc == -1 && errno == EINTR)
    {
        if (alarm_triggered)
        {
            /* timed out! */
        }
    }
    alarm(0); /* disable alarm */
    /* ... */
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top