menuTicketing

Ticketing C/C++ لائبریری

GitHub

ابھی تک vcpkg کی سرکاری رجسٹری میں رجسٹر نہیں ہوا — جمع کرانے کی شرائط سخت ہیں اور رجسٹریشن ابھی زیرِ عمل ہے۔ فی الحال اوپر دیے گئے Github ریپو کو کلون کر کے سورس سے بلڈ کریں۔

ریپوزیٹری

مثال

بنیادی مثال

بلاکنگ C API ہے۔ ایک سرور سے جڑ کر کلید حاصل کی جاتی ہے اور فوراً واپس کر دی جاتی ہے۔

c
#include "ticketing/ticketing.h"

const char* addrs[1] = {"127.0.0.1:5225"};
ticketing_broker* broker = ticketing_connect(addrs, 1);
ticketing_wait_ready(broker, 2000);

ticketing_ticket* ticket = NULL;
ticketing_result r = ticketing_acquire(broker, "key", 5, 30, &ticket);

bool held = false;
ticketing_release(ticket, &held);
ticketing_ticket_close(ticket);

printf("pass\n");
ticketing_broker_close(broker);

ہم آہنگی کی مثال (ڈسٹری بیوٹڈ لاک)

کئی pthread اکاؤنٹ کے لحاظ سے لاک کے ذریعے باہمی اخراج کرتے ہوئے جمع/انخلا دہرائیں، تب بھی بیلنس ہمیشہ ابتدائی قدر پر واپس آتا ہے یا نہیں، اس کی تصدیق کرنے کی مثال ہے۔

c
static void* transaction(void* arg) {
    op_t* op = (op_t*)arg;
    char key[32];
    snprintf(key, sizeof(key), "account-%d", op->account);

    ticketing_ticket* ticket = NULL;
    ticketing_result r = ticketing_acquire(g_broker, key, WAIT, LEASE, &ticket);
    if (r != TICKETING_OK) {
        fprintf(stderr, "account %d acquire failed: %s\n", op->account, ticketing_strerror(r));
        return NULL;
    }

    int64_t before = balances[op->account];
    sched_yield(); // جب ہم لاک رکھے ہوں تو محفوظ نازک حصہ
    int64_t after = before + op->delta;
    balances[op->account] = after;

    ticketing_ticket_close(ticket); // بیک گراؤنڈ میں خود بخود واپسی

    const char* action = op->delta < 0 ? "withdraw" : "deposit";
    fprintf(stderr, "account %d %s $%" PRId64 " -> $%" PRId64 "\n", op->account, action, op->delta, after);
    return NULL;
}

مکمل مثال example_test.c، bank_example_test.c، bench_test.c میں دیکھیں۔