XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
Seqlock.hxx
浏览该文件的文档.
1
13#ifndef __xwos_cxx_lock_Seqlock_hxx__
14#define __xwos_cxx_lock_Seqlock_hxx__
15
18
19namespace xwos {
20namespace lock {
21
480{
481 public:
489 };
490
501 {
502 protected:
505
506 public:
511 RdexLkGrd(Seqlock * seqlock);
512
517 RdexLkGrd(Seqlock & seqlock);
518
523
529 void unlock();
530
534 enum LockStatus getStatus() { return mStatus; }
558
568 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
569
596
607 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
608
609 protected:
611 : mSeqlock(nullptr)
613 {
614 }
615 };
616
627 class TryRdexLkGrd : public RdexLkGrd
628 {
629 private:
632 public:
638
644
649
656 xwer_t getRc() { return mRc; }
657 };
658
670 {
671 protected:
676 public:
682
688
693
699 void unlock();
700
704 enum LockStatus getStatus() { return mStatus; }
705
729
739 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
740
767
778 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
779
780 protected:
782 : mSeqlock(nullptr)
784 {
785 }
786 };
787
800 {
801 private:
804 public:
810
816
821
828 xwer_t getRc() { return mRc; }
829 };
830
841 {
842 protected:
845
846 public:
852
858
863
869 void unlock();
870
874 enum LockStatus getStatus() { return mStatus; }
875
899
909 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
910
937
948 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
949
950 protected:
952 : mSeqlock(nullptr)
954 {
955 }
956 };
957
970 {
971 private:
974 public:
980
986
991
998 xwer_t getRc() { return mRc; }
999 };
1000
1011 template<xwirq_t... TIrqList>
1013 {
1014 protected:
1017 xwirq_t mIrqs[sizeof...(TIrqList)];
1018 xwreg_t mIrqFlags[sizeof...(TIrqList)];
1019
1020 public:
1026 : mSeqlock(seqlock)
1028 , mIrqs{ TIrqList... }
1029 {
1030 if (nullptr != mSeqlock) {
1032 sizeof...(TIrqList));
1034 }
1035 }
1036
1042 : mSeqlock(&seqlock)
1044 , mIrqs{ TIrqList... }
1045 {
1046 if (nullptr != mSeqlock) {
1048 sizeof...(TIrqList));
1050 }
1051 }
1052
1057 {
1058 if (nullptr != mSeqlock) {
1062 sizeof...(TIrqList));
1063 }
1064 }
1065 }
1066
1072 void unlock()
1073 {
1074 if (nullptr != mSeqlock) {
1078 sizeof...(TIrqList));
1079 }
1080 }
1081 }
1082
1086 enum LockStatus getStatus() { return mStatus; }
1087
1111 {
1112 xwer_t rc;
1113 if (nullptr != mSeqlock) {
1115 union xwos_ulock lock;
1116 xwsq_t lkst;
1117 lock.osal.sqlk = &mSeqlock->mLock;
1118 rc = xwos_cond_wait(cond->getXwosObj(), lock, XWOS_LK_SQLK_RDEX,
1119 nullptr, &lkst);
1120 if (rc < 0) {
1121 if (XWOS_LKST_UNLOCKED == lkst) {
1123 }
1124 }
1125 } else {
1126 rc = -ENOLCK;
1127 }
1128 } else {
1129 rc = -EFAULT;
1130 }
1131 return rc;
1132 }
1133
1143 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1144
1171 {
1172 xwer_t rc;
1173 if (nullptr != mSeqlock) {
1175 union xwos_ulock lock;
1176 xwsq_t lkst;
1177 lock.osal.sqlk = &mSeqlock->mLock;
1179 nullptr, to, &lkst);
1180 if (rc < 0) {
1181 if (XWOS_LKST_UNLOCKED == lkst) {
1183 }
1184 }
1185 } else {
1186 rc = -ENOLCK;
1187 }
1188 } else {
1189 rc = -EFAULT;
1190 }
1191 return rc;
1192 }
1193
1204 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
1205
1206 protected:
1208 : mSeqlock(nullptr)
1210 {
1211 }
1212 };
1213
1226 template<xwirq_t... TIrqList>
1227 class TryRdexLkIrqsGrd : public RdexLkIrqsGrd<TIrqList...>
1228 {
1229 private:
1232 public:
1238 : RdexLkIrqsGrd<TIrqList...>()
1239 {
1240 RdexLkIrqsGrd<TIrqList...>::mSeqlock = seqlock;
1241 if (nullptr != RdexLkIrqsGrd<TIrqList...>::mSeqlock) {
1245 RdexLkIrqsGrd<TIrqList...>::mIrqFlags, sizeof...(TIrqList));
1246 if (XWOK != mRc) {
1247 RdexLkIrqsGrd<TIrqList...>::mSeqlock = nullptr;
1248 }
1249 }
1250 }
1251
1257 : RdexLkIrqsGrd<TIrqList...>()
1258 {
1259 RdexLkIrqsGrd<TIrqList...>::mSeqlock = seqlock;
1260 if (nullptr != RdexLkIrqsGrd<TIrqList...>::mSeqlock) {
1264 RdexLkIrqsGrd<TIrqList...>::mIrqFlags, sizeof...(TIrqList));
1265 if (XWOK != mRc) {
1266 RdexLkIrqsGrd<TIrqList...>::mSeqlock = nullptr;
1267 }
1268 }
1269 }
1270
1275
1282 xwer_t getRc() { return mRc; }
1283 };
1284
1295 {
1296 protected:
1299
1300 public:
1305 WrLkGrd(Seqlock * seqlock);
1306
1311 WrLkGrd(Seqlock & seqlock);
1312
1317
1323 void unlock();
1324
1328 enum LockStatus getStatus() { return mStatus; }
1329
1353
1363 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1364
1391
1402 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
1403
1404 protected:
1406 : mSeqlock(nullptr)
1408 {
1409 }
1410 };
1411
1422 class TryWrLkGrd : public WrLkGrd
1423 {
1424 private:
1427 public:
1433
1439
1444
1451 xwer_t getRc() { return mRc; }
1452 };
1453
1465 {
1466 protected:
1471 public:
1476 WrLkThGrd(Seqlock * seqlock);
1477
1482 WrLkThGrd(Seqlock & seqlock);
1483
1488
1494 void unlock();
1495
1499 enum LockStatus getStatus() { return mStatus; }
1500
1524
1534 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1535
1562
1573 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
1574
1575 protected:
1577 : mSeqlock(nullptr)
1579 {
1580 }
1581 };
1582
1595 {
1596 private:
1599 public:
1605
1611
1616
1623 xwer_t getRc() { return mRc; }
1624 };
1625
1636 {
1637 protected:
1640
1641 public:
1646 WrLkBhGrd(Seqlock * seqlock);
1647
1652 WrLkBhGrd(Seqlock & seqlock);
1653
1658
1664 void unlock();
1665
1669 enum LockStatus getStatus() { return mStatus; }
1670
1694
1704 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1705
1732
1743 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
1744
1745 protected:
1747 : mSeqlock(nullptr)
1749 {
1750 }
1751 };
1752
1765 {
1766 private:
1769 public:
1775
1781
1786
1793 xwer_t getRc() { return mRc; }
1794 };
1795
1806 template<xwirq_t... TIrqList>
1808 {
1809 protected:
1812 xwirq_t mIrqs[sizeof...(TIrqList)];
1813 xwreg_t mIrqFlags[sizeof...(TIrqList)];
1814
1815 public:
1821 : mSeqlock(seqlock)
1823 , mIrqs{ TIrqList... }
1824 {
1825 if (nullptr != mSeqlock) {
1827 sizeof...(TIrqList));
1829 }
1830 }
1831
1837 : mSeqlock(&seqlock)
1839 , mIrqs{ TIrqList... }
1840 {
1841 if (nullptr != mSeqlock) {
1843 sizeof...(TIrqList));
1845 }
1846 }
1847
1852 {
1853 if (nullptr != mSeqlock) {
1857 sizeof...(TIrqList));
1858 }
1859 }
1860 }
1861
1867 void unlock()
1868 {
1869 if (nullptr != mSeqlock) {
1873 sizeof...(TIrqList));
1874 }
1875 }
1876 }
1877
1881 enum LockStatus getStatus() { return mStatus; }
1882
1906 {
1907 xwer_t rc;
1908 if (nullptr != mSeqlock) {
1910 union xwos_ulock lock;
1911 xwsq_t lkst;
1912 lock.osal.sqlk = &mSeqlock->mLock;
1913 rc = xwos_cond_wait(cond->getXwosObj(), lock, XWOS_LK_SQLK_WR,
1914 nullptr, &lkst);
1915 if (rc < 0) {
1916 if (XWOS_LKST_UNLOCKED == lkst) {
1918 }
1919 }
1920 } else {
1921 rc = -ENOLCK;
1922 }
1923 } else {
1924 rc = -EFAULT;
1925 }
1926 return rc;
1927 }
1928
1938 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1939
1966 {
1967 xwer_t rc;
1968 if (nullptr != mSeqlock) {
1970 union xwos_ulock lock;
1971 xwsq_t lkst;
1972 lock.osal.sqlk = &mSeqlock->mLock;
1973 rc = xwos_cond_wait_to(cond->getXwosObj(), lock, XWOS_LK_SQLK_WR,
1974 nullptr, to, &lkst);
1975 if (rc < 0) {
1976 if (XWOS_LKST_UNLOCKED == lkst) {
1978 }
1979 }
1980 } else {
1981 rc = -ENOLCK;
1982 }
1983 } else {
1984 rc = -EFAULT;
1985 }
1986 return rc;
1987 }
1988
1999 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
2000
2001 protected:
2003 : mSeqlock(nullptr)
2005 {
2006 }
2007 };
2008
2021 template<xwirq_t... TIrqList>
2022 class TryWrLkIrqsGrd : public WrLkIrqsGrd<TIrqList...>
2023 {
2024 private:
2027 public:
2033 : WrLkIrqsGrd<TIrqList...>()
2034 {
2035 WrLkIrqsGrd<TIrqList...>::mSeqlock = seqlock;
2036 if (nullptr != WrLkIrqsGrd<TIrqList...>::mSeqlock) {
2040 WrLkIrqsGrd<TIrqList...>::mIrqFlags, sizeof...(TIrqList));
2041 if (XWOK != mRc) {
2042 WrLkIrqsGrd<TIrqList...>::mSeqlock = nullptr;
2043 }
2044 }
2045 }
2046
2052 : WrLkIrqsGrd<TIrqList...>()
2053 {
2054 WrLkIrqsGrd<TIrqList...>::mSeqlock = seqlock;
2055 if (nullptr != WrLkIrqsGrd<TIrqList...>::mSeqlock) {
2059 WrLkIrqsGrd<TIrqList...>::mIrqFlags, sizeof...(TIrqList));
2060 if (XWOK != mRc) {
2061 WrLkIrqsGrd<TIrqList...>::mSeqlock = nullptr;
2062 }
2063 }
2064 }
2065
2070
2077 xwer_t getRc() { return mRc; }
2078 };
2079
2080 private:
2083 public:
2086 struct xwos_sqlk * getXwosObj() { return &mLock; }
2097
2106 bool readRetry(xwsq_t start);
2107
2114};
2115
2120} // namespace lock
2121} // namespace xwos
2122
2123#endif /* xwos/cxx/lock/Seqlock.hxx */
xwos::sync::Cond
独占读中断底半部上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:841
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:948
void unlock()
解锁顺序锁
xwer_t wait(sync::Cond *cond)
等待条件量
RdexLkBhGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:874
~RdexLkBhGrd()
析构顺序锁的RAII机制守卫
RdexLkBhGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:909
独占读普通上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:501
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:607
~RdexLkGrd()
析构顺序锁的RAII机制守卫
void unlock()
解锁顺序锁
RdexLkGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:568
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:534
RdexLkGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
xwer_t wait(sync::Cond *cond)
等待条件量
独占读部分中断上锁模式的顺序锁RAII机制守卫
Definition Seqlock.hxx:1013
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1170
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1086
RdexLkIrqsGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1025
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1143
xwreg_t mIrqFlags[sizeof...(TIrqList)]
Definition Seqlock.hxx:1018
void unlock()
解锁顺序锁
Definition Seqlock.hxx:1072
xwer_t wait(sync::Cond *cond)
等待条件量
Definition Seqlock.hxx:1110
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1204
xwirq_t mIrqs[sizeof...(TIrqList)]
Definition Seqlock.hxx:1017
~RdexLkIrqsGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1056
RdexLkIrqsGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1041
独占读CPU中断上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:670
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:704
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:739
RdexLkThGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
xwer_t wait(sync::Cond *cond)
等待条件量
~RdexLkThGrd()
析构顺序锁的RAII机制守卫
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:778
void unlock()
解锁顺序锁
RdexLkThGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
独占读中断底半部尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:970
TryRdexLkBhGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~TryRdexLkBhGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:990
TryRdexLkBhGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:998
独占读普通尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:628
TryRdexLkGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~TryRdexLkGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:648
TryRdexLkGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:656
独占读部分中断尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1228
~TryRdexLkIrqsGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1274
TryRdexLkIrqsGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1237
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1282
TryRdexLkIrqsGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1256
独占读CPU中断尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:800
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:828
TryRdexLkThGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
TryRdexLkThGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
~TryRdexLkThGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:820
独占写中断底半部尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1765
TryWrLkBhGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~TryWrLkBhGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1785
TryWrLkBhGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1793
独占写普通尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1423
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1451
TryWrLkGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~TryWrLkGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1443
TryWrLkGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
独占写部分中断尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:2023
~TryWrLkIrqsGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:2069
TryWrLkIrqsGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:2032
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:2077
TryWrLkIrqsGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:2051
独占写CPU中断尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1595
~TryWrLkThGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1615
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1623
TryWrLkThGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
TryWrLkThGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
独占写中断底半部上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1636
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1704
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
WrLkBhGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
void unlock()
解锁顺序锁
xwer_t wait(sync::Cond *cond)
等待条件量
WrLkBhGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~WrLkBhGrd()
析构顺序锁的RAII机制守卫
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1743
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1669
独占写普通上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1295
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1328
xwer_t wait(sync::Cond *cond)
等待条件量
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
WrLkGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
WrLkGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
void unlock()
解锁顺序锁
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1402
~WrLkGrd()
析构顺序锁的RAII机制守卫
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1363
独占写部分中断上锁模式的顺序锁RAII机制守卫
Definition Seqlock.hxx:1808
xwirq_t mIrqs[sizeof...(TIrqList)]
Definition Seqlock.hxx:1812
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1938
WrLkIrqsGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1836
xwreg_t mIrqFlags[sizeof...(TIrqList)]
Definition Seqlock.hxx:1813
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1965
WrLkIrqsGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1820
void unlock()
解锁顺序锁
Definition Seqlock.hxx:1867
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1999
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1881
~WrLkIrqsGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1851
xwer_t wait(sync::Cond *cond)
等待条件量
Definition Seqlock.hxx:1905
独占写CPU中断上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1465
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1499
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1573
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1534
WrLkThGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
WrLkThGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~WrLkThGrd()
析构顺序锁的RAII机制守卫
void unlock()
解锁顺序锁
xwer_t wait(sync::Cond *cond)
等待条件量
struct xwos_sqlk * getXwosObj()
Definition Seqlock.hxx:2086
xwsq_t readBegin()
开启共享读临界区
xwsq_t getSeq()
获取顺序锁的顺序值
struct xwos_sqlk mLock
Definition Seqlock.hxx:2081
bool readRetry(xwsq_t start)
关闭共享读临界区,并检查是否需要重试
条件量基类
Definition Cond.hxx:56
struct xwos_cond * getXwosObj()
获取XWOS对象指针
Definition Cond.hxx:179
#define EFAULT
Bad address
Definition errno.h:44
#define ENOLCK
No lock
Definition errno.h:76
#define XWOK
No error
Definition errno.h:182
xws64_t xwtm_t
XWOS系统时间 (有符号)
Definition type.h:742
signed long xwer_t
Definition type.h:554
signed int xwirq_t
Definition type.h:517
unsigned long xwsq_t
Definition type.h:445
xwptr_t xwreg_t
Definition type.h:409
uint32_t xwu32_t
Definition type.h:266
@ XWOS_LKST_UNLOCKED
Definition type.h:661
@ XWOS_LK_SQLK_RDEX
Definition type.h:644
@ XWOS_LK_SQLK_WR
Definition type.h:643
static void xwos_sqlk_rdex_lock(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区
Definition seqlock.h:186
static void xwos_sqlk_rdex_unlock_irqsrs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:关闭独占读临界区,恢复部分中断的中断标志
Definition seqlock.h:426
static void xwos_sqlk_wr_lock(struct xwos_sqlk *sql)
XWOS API:开启写临界区
Definition seqlock.h:488
static xwer_t xwos_sqlk_wr_trylock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:尝试开启写临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:712
static void xwos_sqlk_wr_lock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:开启写临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:689
static void xwos_sqlk_rdex_lock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:开启独占读临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:386
static void xwos_sqlk_wr_unlock_irqsrs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:关闭写临界区,恢复部分中断的中断标志
Definition seqlock.h:729
static xwer_t xwos_sqlk_rdex_trylock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:尝试开启独占读临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:409
static xwer_t xwos_cond_wait(struct xwos_cond *cond, union xwos_ulock lock, xwsq_t lktype, void *lkdata, xwsq_t *lkst)
XWOS API:等待条件量
Definition cond.h:428
static xwer_t xwos_cond_wait_to(struct xwos_cond *cond, union xwos_ulock lock, xwsq_t lktype, void *lkdata, xwtm_t to, xwsq_t *lkst)
XWOS API:限时等待条件量
Definition cond.h:488
Definition Bmp.hxx:21
C++操作系统抽象层:顺序锁
XWOS API:顺序锁
Definition seqlock.h:109
所有锁的联合
Definition type.h:680
union xwos_ulock::@8 osal
struct xwmp_sqlk * sqlk
Definition type.h:684