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
483{
484 public:
492 };
493
504 {
505 protected:
508
509 public:
514 RdexLkGrd(Seqlock * seqlock);
515
520 RdexLkGrd(Seqlock & seqlock);
521
526
532 void unlock();
533
537 enum LockStatus getStatus() { return mStatus; }
561
571 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
572
599
610 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
611
612 protected:
614 : mSeqlock(nullptr)
616 {
617 }
618 };
619
630 class TryRdexLkGrd : public RdexLkGrd
631 {
632 private:
635 public:
641
647
652
659 xwer_t getRc() { return mRc; }
660 };
661
673 {
674 protected:
679 public:
685
691
696
702 void unlock();
703
707 enum LockStatus getStatus() { return mStatus; }
708
732
742 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
743
770
781 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
782
783 protected:
785 : mSeqlock(nullptr)
787 {
788 }
789 };
790
803 {
804 private:
807 public:
813
819
824
831 xwer_t getRc() { return mRc; }
832 };
833
844 {
845 protected:
848
849 public:
855
861
866
872 void unlock();
873
877 enum LockStatus getStatus() { return mStatus; }
878
902
912 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
913
940
951 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
952
953 protected:
955 : mSeqlock(nullptr)
957 {
958 }
959 };
960
973 {
974 private:
977 public:
983
989
994
1001 xwer_t getRc() { return mRc; }
1002 };
1003
1014 template<xwirq_t... TIrqList>
1016 {
1017 protected:
1020 xwirq_t mIrqs[sizeof...(TIrqList)];
1021 xwreg_t mIrqFlags[sizeof...(TIrqList)];
1022
1023 public:
1029 : mSeqlock(seqlock)
1031 , mIrqs{ TIrqList... }
1032 {
1033 if (nullptr != mSeqlock) {
1035 sizeof...(TIrqList));
1037 }
1038 }
1039
1045 : mSeqlock(&seqlock)
1047 , mIrqs{ TIrqList... }
1048 {
1049 if (nullptr != mSeqlock) {
1051 sizeof...(TIrqList));
1053 }
1054 }
1055
1060 {
1061 if (nullptr != mSeqlock) {
1065 sizeof...(TIrqList));
1066 }
1067 }
1068 }
1069
1075 void unlock()
1076 {
1077 if (nullptr != mSeqlock) {
1081 sizeof...(TIrqList));
1082 }
1083 }
1084 }
1085
1089 enum LockStatus getStatus() { return mStatus; }
1090
1114 {
1115 xwer_t rc;
1116 if (nullptr != mSeqlock) {
1118 union xwos_ulock lock;
1119 xwsq_t lkst;
1120 lock.osal.sqlk = &mSeqlock->mLock;
1121 rc = xwos_cond_wait(cond->getXwosObj(), lock, XWOS_LK_SQLK_RDEX,
1122 nullptr, &lkst);
1123 if (rc < 0) {
1124 if (XWOS_LKST_UNLOCKED == lkst) {
1126 }
1127 }
1128 } else {
1129 rc = -ENOLCK;
1130 }
1131 } else {
1132 rc = -EFAULT;
1133 }
1134 return rc;
1135 }
1136
1146 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1147
1174 {
1175 xwer_t rc;
1176 if (nullptr != mSeqlock) {
1178 union xwos_ulock lock;
1179 xwsq_t lkst;
1180 lock.osal.sqlk = &mSeqlock->mLock;
1182 nullptr, to, &lkst);
1183 if (rc < 0) {
1184 if (XWOS_LKST_UNLOCKED == lkst) {
1186 }
1187 }
1188 } else {
1189 rc = -ENOLCK;
1190 }
1191 } else {
1192 rc = -EFAULT;
1193 }
1194 return rc;
1195 }
1196
1207 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
1208
1209 protected:
1211 : mSeqlock(nullptr)
1213 {
1214 }
1215 };
1216
1229 template<xwirq_t... TIrqList>
1230 class TryRdexLkIrqsGrd : public RdexLkIrqsGrd<TIrqList...>
1231 {
1232 private:
1235 public:
1241 : RdexLkIrqsGrd<TIrqList...>()
1242 {
1243 RdexLkIrqsGrd<TIrqList...>::mSeqlock = seqlock;
1244 if (nullptr != RdexLkIrqsGrd<TIrqList...>::mSeqlock) {
1248 RdexLkIrqsGrd<TIrqList...>::mIrqFlags, sizeof...(TIrqList));
1249 if (XWOK != mRc) {
1250 RdexLkIrqsGrd<TIrqList...>::mSeqlock = nullptr;
1251 }
1252 }
1253 }
1254
1260 : RdexLkIrqsGrd<TIrqList...>()
1261 {
1262 RdexLkIrqsGrd<TIrqList...>::mSeqlock = seqlock;
1263 if (nullptr != RdexLkIrqsGrd<TIrqList...>::mSeqlock) {
1267 RdexLkIrqsGrd<TIrqList...>::mIrqFlags, sizeof...(TIrqList));
1268 if (XWOK != mRc) {
1269 RdexLkIrqsGrd<TIrqList...>::mSeqlock = nullptr;
1270 }
1271 }
1272 }
1273
1278
1285 xwer_t getRc() { return mRc; }
1286 };
1287
1298 {
1299 protected:
1302
1303 public:
1308 WrLkGrd(Seqlock * seqlock);
1309
1314 WrLkGrd(Seqlock & seqlock);
1315
1320
1326 void unlock();
1327
1331 enum LockStatus getStatus() { return mStatus; }
1332
1356
1366 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1367
1394
1405 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
1406
1407 protected:
1409 : mSeqlock(nullptr)
1411 {
1412 }
1413 };
1414
1425 class TryWrLkGrd : public WrLkGrd
1426 {
1427 private:
1430 public:
1436
1442
1447
1454 xwer_t getRc() { return mRc; }
1455 };
1456
1468 {
1469 protected:
1474 public:
1479 WrLkThGrd(Seqlock * seqlock);
1480
1485 WrLkThGrd(Seqlock & seqlock);
1486
1491
1497 void unlock();
1498
1502 enum LockStatus getStatus() { return mStatus; }
1503
1527
1537 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1538
1565
1576 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
1577
1578 protected:
1580 : mSeqlock(nullptr)
1582 {
1583 }
1584 };
1585
1598 {
1599 private:
1602 public:
1608
1614
1619
1626 xwer_t getRc() { return mRc; }
1627 };
1628
1639 {
1640 protected:
1643
1644 public:
1649 WrLkBhGrd(Seqlock * seqlock);
1650
1655 WrLkBhGrd(Seqlock & seqlock);
1656
1661
1667 void unlock();
1668
1672 enum LockStatus getStatus() { return mStatus; }
1673
1697
1707 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1708
1735
1746 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
1747
1748 protected:
1750 : mSeqlock(nullptr)
1752 {
1753 }
1754 };
1755
1768 {
1769 private:
1772 public:
1778
1784
1789
1796 xwer_t getRc() { return mRc; }
1797 };
1798
1809 template<xwirq_t... TIrqList>
1811 {
1812 protected:
1815 xwirq_t mIrqs[sizeof...(TIrqList)];
1816 xwreg_t mIrqFlags[sizeof...(TIrqList)];
1817
1818 public:
1824 : mSeqlock(seqlock)
1826 , mIrqs{ TIrqList... }
1827 {
1828 if (nullptr != mSeqlock) {
1830 sizeof...(TIrqList));
1832 }
1833 }
1834
1840 : mSeqlock(&seqlock)
1842 , mIrqs{ TIrqList... }
1843 {
1844 if (nullptr != mSeqlock) {
1846 sizeof...(TIrqList));
1848 }
1849 }
1850
1855 {
1856 if (nullptr != mSeqlock) {
1860 sizeof...(TIrqList));
1861 }
1862 }
1863 }
1864
1870 void unlock()
1871 {
1872 if (nullptr != mSeqlock) {
1876 sizeof...(TIrqList));
1877 }
1878 }
1879 }
1880
1884 enum LockStatus getStatus() { return mStatus; }
1885
1909 {
1910 xwer_t rc;
1911 if (nullptr != mSeqlock) {
1913 union xwos_ulock lock;
1914 xwsq_t lkst;
1915 lock.osal.sqlk = &mSeqlock->mLock;
1916 rc = xwos_cond_wait(cond->getXwosObj(), lock, XWOS_LK_SQLK_WR,
1917 nullptr, &lkst);
1918 if (rc < 0) {
1919 if (XWOS_LKST_UNLOCKED == lkst) {
1921 }
1922 }
1923 } else {
1924 rc = -ENOLCK;
1925 }
1926 } else {
1927 rc = -EFAULT;
1928 }
1929 return rc;
1930 }
1931
1941 xwer_t wait(sync::Cond & cond) { return wait(&cond); }
1942
1969 {
1970 xwer_t rc;
1971 if (nullptr != mSeqlock) {
1973 union xwos_ulock lock;
1974 xwsq_t lkst;
1975 lock.osal.sqlk = &mSeqlock->mLock;
1976 rc = xwos_cond_wait_to(cond->getXwosObj(), lock, XWOS_LK_SQLK_WR,
1977 nullptr, to, &lkst);
1978 if (rc < 0) {
1979 if (XWOS_LKST_UNLOCKED == lkst) {
1981 }
1982 }
1983 } else {
1984 rc = -ENOLCK;
1985 }
1986 } else {
1987 rc = -EFAULT;
1988 }
1989 return rc;
1990 }
1991
2002 xwer_t wait(sync::Cond & cond, xwtm_t to) { return wait(&cond, to); }
2003
2004 protected:
2006 : mSeqlock(nullptr)
2008 {
2009 }
2010 };
2011
2024 template<xwirq_t... TIrqList>
2025 class TryWrLkIrqsGrd : public WrLkIrqsGrd<TIrqList...>
2026 {
2027 private:
2030 public:
2036 : WrLkIrqsGrd<TIrqList...>()
2037 {
2038 WrLkIrqsGrd<TIrqList...>::mSeqlock = seqlock;
2039 if (nullptr != WrLkIrqsGrd<TIrqList...>::mSeqlock) {
2043 WrLkIrqsGrd<TIrqList...>::mIrqFlags, sizeof...(TIrqList));
2044 if (XWOK != mRc) {
2045 WrLkIrqsGrd<TIrqList...>::mSeqlock = nullptr;
2046 }
2047 }
2048 }
2049
2055 : WrLkIrqsGrd<TIrqList...>()
2056 {
2057 WrLkIrqsGrd<TIrqList...>::mSeqlock = seqlock;
2058 if (nullptr != WrLkIrqsGrd<TIrqList...>::mSeqlock) {
2062 WrLkIrqsGrd<TIrqList...>::mIrqFlags, sizeof...(TIrqList));
2063 if (XWOK != mRc) {
2064 WrLkIrqsGrd<TIrqList...>::mSeqlock = nullptr;
2065 }
2066 }
2067 }
2068
2073
2080 xwer_t getRc() { return mRc; }
2081 };
2082
2083 private:
2086 public:
2089 struct xwos_sqlk * getXwosObj() { return &mLock; }
2100
2109 bool readRetry(xwsq_t start);
2110
2117};
2118
2123} // namespace lock
2124} // namespace xwos
2125
2126#endif /* xwos/cxx/lock/Seqlock.hxx */
xwos::sync::Cond
独占读中断底半部上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:844
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:951
void unlock()
解锁顺序锁
xwer_t wait(sync::Cond *cond)
等待条件量
RdexLkBhGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:877
~RdexLkBhGrd()
析构顺序锁的RAII机制守卫
RdexLkBhGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:912
独占读普通上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:504
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:610
~RdexLkGrd()
析构顺序锁的RAII机制守卫
void unlock()
解锁顺序锁
RdexLkGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:571
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:537
RdexLkGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
xwer_t wait(sync::Cond *cond)
等待条件量
独占读部分中断上锁模式的顺序锁RAII机制守卫
Definition Seqlock.hxx:1016
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1173
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1089
RdexLkIrqsGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1028
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1146
xwreg_t mIrqFlags[sizeof...(TIrqList)]
Definition Seqlock.hxx:1021
void unlock()
解锁顺序锁
Definition Seqlock.hxx:1075
xwer_t wait(sync::Cond *cond)
等待条件量
Definition Seqlock.hxx:1113
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1207
xwirq_t mIrqs[sizeof...(TIrqList)]
Definition Seqlock.hxx:1020
~RdexLkIrqsGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1059
RdexLkIrqsGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1044
独占读CPU中断上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:673
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:707
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:742
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:781
void unlock()
解锁顺序锁
RdexLkThGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
独占读中断底半部尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:973
TryRdexLkBhGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~TryRdexLkBhGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:993
TryRdexLkBhGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1001
独占读普通尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:631
TryRdexLkGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~TryRdexLkGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:651
TryRdexLkGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:659
独占读部分中断尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1231
~TryRdexLkIrqsGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1277
TryRdexLkIrqsGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1240
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1285
TryRdexLkIrqsGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1259
独占读CPU中断尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:803
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:831
TryRdexLkThGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
TryRdexLkThGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
~TryRdexLkThGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:823
独占写中断底半部尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1768
TryWrLkBhGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~TryWrLkBhGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1788
TryWrLkBhGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1796
独占写普通尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1426
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1454
TryWrLkGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
~TryWrLkGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1446
TryWrLkGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
独占写部分中断尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:2026
~TryWrLkIrqsGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:2072
TryWrLkIrqsGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:2035
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:2080
TryWrLkIrqsGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:2054
独占写CPU中断尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1598
~TryWrLkThGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1618
xwer_t getRc()
获取上锁结果错误码
Definition Seqlock.hxx:1626
TryWrLkThGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
TryWrLkThGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
独占写中断底半部上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1639
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1707
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:1746
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1672
独占写普通上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1298
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1331
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:1405
~WrLkGrd()
析构顺序锁的RAII机制守卫
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1366
独占写部分中断上锁模式的顺序锁RAII机制守卫
Definition Seqlock.hxx:1811
xwirq_t mIrqs[sizeof...(TIrqList)]
Definition Seqlock.hxx:1815
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1941
WrLkIrqsGrd(Seqlock &seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1839
xwreg_t mIrqFlags[sizeof...(TIrqList)]
Definition Seqlock.hxx:1816
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1968
WrLkIrqsGrd(Seqlock *seqlock)
构造顺序锁的RAII机制守卫
Definition Seqlock.hxx:1823
void unlock()
解锁顺序锁
Definition Seqlock.hxx:1870
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:2002
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1884
~WrLkIrqsGrd()
析构顺序锁的RAII机制守卫
Definition Seqlock.hxx:1854
xwer_t wait(sync::Cond *cond)
等待条件量
Definition Seqlock.hxx:1908
独占写CPU中断上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1468
xwer_t wait(sync::Cond *cond, xwtm_t to)
限时等待条件量
enum LockStatus getStatus()
获取锁状态
Definition Seqlock.hxx:1502
xwer_t wait(sync::Cond &cond, xwtm_t to)
限时等待条件量
Definition Seqlock.hxx:1576
xwer_t wait(sync::Cond &cond)
等待条件量
Definition Seqlock.hxx:1537
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:2089
xwsq_t readBegin()
开启共享读临界区
xwsq_t getSeq()
获取顺序锁的顺序值
struct xwos_sqlk mLock
Definition Seqlock.hxx:2084
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:189
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:429
static void xwos_sqlk_wr_lock(struct xwos_sqlk *sql)
XWOS API:开启写临界区
Definition seqlock.h:491
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:715
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:692
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:389
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:732
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:412
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:432
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:492
Definition Bmp.hxx:21
C++操作系统抽象层:顺序锁
XWOS API:顺序锁
Definition seqlock.h:112
所有锁的联合
Definition type.h:680
union xwos_ulock::@8 osal
struct xwmp_sqlk * sqlk
Definition type.h:684