Buckets:
| // Cross-process exclusive lock (flock on POSIX, LockFileEx on Windows). | |
| // Lazy: acquire() opens the lock file, so a read-only cache works if the lock is never acquired. | |
| class common_file_lock { | |
| public: | |
| common_file_lock(const std::string & lock_path); | |
| ~common_file_lock(); | |
| // take the lock, waiting while another process holds it; | |
| // keep_waiting is polled before each retry, false cancels the wait. | |
| // Also returns false when locking is unavailable. | |
| bool acquire(const std::function<bool()> & keep_waiting = {}); | |
| void close(); | |
| common_file_lock(const common_file_lock &) = delete; | |
| common_file_lock & operator=(const common_file_lock &) = delete; | |
| private: | |
| enum class status { | |
| acquired, | |
| busy, // another process holds the lock | |
| error, // file locking is unavailable: no exclusion is possible | |
| }; | |
| status try_lock(); | |
| std::string lock_path; | |
| int fd = -1; | |
| bool locked = false; | |
| }; | |
Xet Storage Details
- Size:
- 1.02 kB
- Xet hash:
- 24dde5375c95c3e68d56182a214e8ea6804f6a42f09baa48ff32b4e77d694a57
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.