Ein Semaphor (von altgriechisch σῆμα sēma, deutsch ‚Zeichen‘ und φέρειν pherein ‚tragen‘ – also etwa „Signalgeber“) ist eine Datenstruktur, die aus einer Ganzzahl und den atomaren Nutzungsoperationen „Reservieren/Probieren“ und „Freigeben“ besteht. Sie eignet sich insbesondere zur Verwaltung beschränkter (zählbarer) Ressourcen, auf die mehrere Prozesse oder Threads zugreifen sollen, wie etwa Erzeuger und Verbraucher, sowie zur Koordination asynchroner Abläufe. Im Gegensatz zu einem Lock bzw. einem Mutex müssen die Aktivitätsträger, die „reservieren“ und „freigeben“, nicht identisch sein.