Cấu trúc thư mục dự án
synchronized.dart/
├── lib/
│ ├── synchronized.dart
│ ├── synchronized_extension.dart
│ └── synchronized_lock.dart
├── test/
│ ├── synchronized_test.dart
│ └── synchronized_extension_test.dart
├── .gitignore
├── LICENSE
├── README.md
└── pubspec.yaml
Giải thích các thành phần
- lib/: Chứa mã nguồn chính của thư viện.
synchronized.dart: Cung cấp cơ chế khóa cơ bản để ngăn chặn truy cập đồng thời trong mã bất đồng bộ.synchronized_extension.dart: Mở rộng cho phép bất kỳ đối tượng nào trở thành khóa.synchronized_lock.dart: Triển khai chi tiết về lớp khóa.- test/: Thư mục chứa các tệp kiểm thử.
synchronized_test.dart: Kiểm thử chức năng chính.synchronized_extension_test.dart: Kiểm thử module mở rộng.- .gitignore: Tệp cấu hình bỏ qua Git.
- LICENSE: Giấy phép mã nguồn mở.
- README.md: Tài liệu hướng dẫn sử dụng.
- pubspec.yaml: Tệp cấu hình phụ thuộc và thông tin gói.
Tệp khởi chạy chính
Tệp lib/synchronized.dart là điểm vào chính của thư viện, cung cấp khả năng đồng bộ hóa cho mã bất đồng bộ. Nội dung chính như sau:
import 'dart:async';
class Mutex {
Future _currentTask;
bool _active = false;
Mutex();
Future execute(Function() task) async {
while (_active) {
await _currentTask;
}
_active = true;
_currentTask = Future(() {});
try {
task();
} finally {
_active = false;
}
}
}
Chức năng chính
- Lớp Mutex: Quản lý trạng thái khóa để đảm bảo chỉ có một tác vụ được thực thi tại một thời điểm.
- Phương thức execute: Bao bọc logic thực thi với cơ chế chờ đợi khi có tác vụ đang chạy.
Cấu hình dự án
Tệp pubspec.yaml xác định thông tin dự án và các gói phụ thuộc cần thiết:
name: synchronized
version: 3.3.0+2
description: Cơ chế khóa đơn giản giúp tránh truy cập đồng thời vào mã bất đồng bộ.
homepage: https://github.com/tekartik/synchronized.dart
environment:
sdk: '>=2.12.0 <3.0.0'
dependencies:
synchronized: ^3.3.0+2
dev_dependencies:
test: ^1.16.0
Các trường quan trọng
- name: Tên gói.
- version: Phiên bản hiện tại.
- description: Mô tả ngắn gọn chức năng.
- homepage: Đường dẫn đến kho lưu trữ.
- environment: Yêu cầu phiên bản SDK Dart tối thiểu.
- dependencies: Danh sách các gói phụ thuộc runtime.
- dev_dependencies: Các gói chỉ dùng trong quá trình phát triển và kiểm thử.