TGViewer
CodeVerse | دنیای برنامه نویسان CodeVerse | دنیای برنامه نویسان @codeverse_dev · 1.06K subscribers
Post #639 250
چرا این کد JavaScript در شرایط هم‌زمانی مشکل‌ساز است؟

🧠 یک Race Condition پنهان در JavaScript

کد زیر را در نظر بگیر:

let balance = 100;

async function withdraw(amount) {
if (balance >= amount) {
await saveTransaction(amount);
balance -= amount;
}
}

حالا فرض کن دو درخواست برداشت ۸۰ واحدی تقریباً هم‌زمان اجرا شوند.

هر دو ممکن است قبل از پایان await، موجودی ۱۰۰ را بخوانند و شرط را با موفقیت پشت سر بگذارند.

نتیجه؟ هر دو تراکنش می‌توانند ثبت شوند، درحالی‌که موجودی کافی برای هر دو وجود ندارد.

این یک نمونه از Race Condition است.

🔍 نکته مهم این است که JavaScript تک‌ریسمانی بودنش را تضمین‌کننده امنیت عملیات ناهم‌زمان نمی‌کند.

راهکارهای واقعی:

🔹 کنترل اتمیک موجودی در دیتابیس
🔹 استفاده از Transaction
🔹 قفل‌گذاری مناسب یا Optimistic Concurrency
🔹 اعمال محدودیت در سطح دیتابیس

برای نمونه، کاهش موجودی باید به‌صورت شرطی و اتمیک انجام شود؛ نه با خواندن و سپس نوشتن جداگانه.

قاعده: عملیات مالی را هرگز صرفاً به کنترل‌های سمت JavaScript نسپارید.


@CodeVerse_dev
  • 👍 5
  • ❤ 2
More from @codeverse_dev
  1. Oct 6, 2026شرکت Google وارد یک درگیری جدی با ناشران شده ⚖️ رگولاتور رقابت لهستان اعلام کرده Google را…
  2. Oct 6, 2026اگر Windows 11 داری، قبل از نصب بعضی آپدیت‌ها حواست باشد ⚠️ مایکروسافت تأیید کرده آپدیت پی…
  3. Oct 6, 2026اگر Chrome استفاده می‌کنی، این آپدیت را جدی بگیر ⚡ نسخه Stable مرورگر Chrome برای دسکتاپ ب…
  4. Oct 6, 2026🖥 سازنده محتوایی؟ ویندوزت بدون این ۵ نرم‌افزار نصفه‌ست! خب راستشو بخوای، من خودم تا چند و…
  5. Oct 6, 2026🔥 یکی از بهترین قابلیت‌های جدید Chrome DevTools برای Debug کردن Memory Leak اگر با Web Ap…
  6. Oct 5, 2026هوش مصنوعی ChatGPT حالا تبلیغات تصویری را هم آزمایش می‌کند 👀 شرکت OpenAI اعلام کرده قرار…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →