ابھی تک vcpkg کی سرکاری رجسٹری میں رجسٹر نہیں ہوا — جمع کرانے کی شرائط سخت ہیں اور رجسٹریشن ابھی زیرِ عمل ہے۔ فی الحال اوپر دیے گئے Github ریپو کو کلون کر کے سورس سے بلڈ کریں۔
بلاکنگ C API ہے۔ ایک سرور سے جڑ کر کلید حاصل کی جاتی ہے اور فوراً واپس کر دی جاتی ہے۔
#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 اکاؤنٹ کے لحاظ سے لاک کے ذریعے باہمی اخراج کرتے ہوئے جمع/انخلا دہرائیں، تب بھی بیلنس ہمیشہ ابتدائی قدر پر واپس آتا ہے یا نہیں، اس کی تصدیق کرنے کی مثال ہے۔
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 میں دیکھیں۔