From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mxout1-ec2-va.apache.org (mxout1-ec2-va.apache.org [3.227.148.255]) by sourceware.org (Postfix) with ESMTPS id 1189A3858CD1 for ; Tue, 12 Mar 2024 03:48:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1189A3858CD1 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=apache.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=apache.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1189A3858CD1 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=3.227.148.255 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710215313; cv=none; b=MqTzr1lxBVHKaH6H3ti7M6hd4UWnx4oUItzexHb/ZvVN2AstoV0I6mwFrVpAlM6Tf53xFeG8Bz565kwGlm1TJpnyxIyWXEuNRf8nb3DbM/p75iodoxf2S/ycsmJo25aO3nzsOYYbvXECCRd11cBVkwGcQDiObrUmDbiRuF7kNOM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710215313; c=relaxed/simple; bh=74/6ipDm+7pY6GeW77t3U/wwgDASUQVSHHyfiB/zAjk=; h=Message-ID:Date:MIME-Version:Subject:From:To; b=FAhwUS6jSfVrWQVIj7shW7jn10iDAZnt6zq3PuzY7uAqfWarxRdAskLGTHb1ojouPj3y+Ckzt1jbp0rhAdVg8rfKv0bDmd/X1fMUGS8RHu9FCBSDdOoPJNaw812CzJ6AEpEcKlbR/anpPlfM9jr2oPXT/VTeWS56rjap4EQGLyY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from mail.apache.org (mailgw-he-de.apache.org [116.203.246.181]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by mxout1-ec2-va.apache.org (ASF Mail Server at mxout1-ec2-va.apache.org) with ESMTPS id 7DCFA46FDA for ; Tue, 12 Mar 2024 03:48:31 +0000 (UTC) Received: (qmail 140988 invoked by uid 116); 12 Mar 2024 03:48:30 -0000 Received: from ec2-52-204-25-47.compute-1.amazonaws.com (HELO mailrelay1-ec2-va.apache.org) (52.204.25.47) by apache.org (qpsmtpd/0.94) with ESMTP; Tue, 12 Mar 2024 03:48:30 +0000 Authentication-Results: apache.org; auth=none Received: from [192.168.28.122] (unknown [125.119.221.110]) by mailrelay1-ec2-va.apache.org (ASF Mail Server at mailrelay1-ec2-va.apache.org) with ESMTPSA id 86A2140D95 for ; Tue, 12 Mar 2024 03:48:29 +0000 (UTC) Message-ID: Date: Tue, 12 Mar 2024 11:48:27 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Priority Inversion and Unlimited Spin of pthread_rwlock_t Content-Language: en-US From: Peng Zheng To: libc-alpha@sourceware.org References: <0e210b7b-5349-41fe-a476-87958990e03e@apache.org> In-Reply-To: <0e210b7b-5349-41fe-a476-87958990e03e@apache.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00,ENV_AND_HDR_SPF_MATCH,KAM_DMARC_STATUS,RCVD_IN_BARRACUDACENTRAL,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_SPF_WL autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 2024/3/12 11:19, Peng Zheng wrote: > Hi, > > I found that there are several unlimited spins in the current > pthread_rwlock's implementation. > Therefore, it suffers from the same issue of user-space spinlocks as > mentioned in this LWN article ([0]): I forget to mention this issue is glibc-specific. Just checked musl's source code, all spin in its pthread_rwlock_t is limited to 100. For example: int __pthread_rwlock_timedwrlock(pthread_rwlock_t *restrict rw, const struct timespec *restrict at) { int r, t; r = pthread_rwlock_trywrlock(rw); if (r != EBUSY) return r; int spins = 100; while (spins-- && rw->_rw_lock && !rw->_rw_waiters) a_spin(); while ((r=__pthread_rwlock_trywrlock(rw))==EBUSY) { if (!(r=rw->_rw_lock)) continue; t = r | 0x80000000; a_inc(&rw->_rw_waiters); a_cas(&rw->_rw_lock, r, t); r = __timedwait(&rw->_rw_lock, t, CLOCK_REALTIME, at, rw->_rw_shared^128); a_dec(&rw->_rw_waiters); if (r && r != EINTR) return r; } return r; } Regards, -- Peng Zheng