提交 62031e55 编写于 作者: O openharmony_ci 提交者: Annie_wang

!22386 [翻译完成】PR21299

Merge pull request !22386 from Annie_wang/PR21299
......@@ -15,19 +15,18 @@ When a user-mode thread releases a lock, the lock status is first checked in use
When thread scheduling is required to resolve lock contention or lock release in user space, the futex system call is invoked to pass the user-mode lock address to the kernel. The user-mode locks are distinguished by lock address in the futex of the kernel. The available virtual address space in user space is 1 GiB. To facilitate search and management of lock addresses, the kernel futex uses hash buckets to store the user-mode locks.
There are 80 hash buckets used to store shared locks (hashed based on physical addresses). The private/shared attributes are determined by initialization of user-mode locks and the input parameters in the futex system call.
There are 80 hash buckets. Buckets 0 to 63 store private locks (hashed with the virtual address), and buckets 64 to 79 store shared locks (hashed with the physical address). The private/shared attributes are determined by initialization of user-mode locks and the input parameters in the futex system call.
## Futex Design
As shown in the following figure, each futex hash bucket stores the futex nodes with the same hash value linked in a futex_list. Each futex node corresponds to a suspended task. The key value of a node uniquely identifies a user-mode lock. The nodes with the same key value added to a queue_list indicate a queue of tasks blocked by the same lock.
**Figure 1** Futex design
**Figure 1** Futex design
![](figures/futex-design.jpg "futex-design")
As shown in the above figure, each futex hash bucket stores the futex nodes with the same hash value linked in a futex_list. Each futex node corresponds to a suspended task. The key value of a node uniquely identifies a user-mode lock. The nodes with the same key value added to a queue_list indicate a queue of tasks blocked by the same lock.
## Available APIs
## Futex Operations
APIs of the futex module
The Futex module supports the following operations.
| Category | API | Description |
| -------------- | -------------- | ------------------------------------- |
......@@ -35,5 +34,6 @@ APIs of the futex module
| Waking up a thread| OsFutexWake | Wakes up a thread that is blocked by a specified lock. |
| Modifying the lock address | OsFutexRequeue | Adjusts the position of a specified lock in the futex list. |
> **NOTE**<br>
> The futex system call and user-mode logic form a user-mode lock. Therefore, you are advised to use the locks via the user-mode POSIX APIs.
> **NOTE**
>
> The futex system call and user-mode logic form a user-mode lock. Therefore, you are advised to use the locks via the user-mode POSIX APIs.
# Distributed Data Management Subsystem Changelog
## cl.distributeddatamgr.1 Change of int (*close)(OH_Cursor *cursor) in OH_Cursor Struct to int (\*destroy)(OH_Cursor \*cursor)
**Change Impact**
This change is incompatible with earlier versions. The function pointer name is changed from **close** to **destroy**. The input parameters and return values remain unchanged.
**Key API/Component Changes**
Before change:
```ts
int (*close)(OH_Cursor *cursor);
```
After change:
```ts
int (*destroy)(OH_Cursor *cursor);
```
**Adaptation Guide**
Example:
Code before change:
```
cursor->close(cursor);
```
Code after change:
```
cursor->destroy(cursor);
```
## cl.distributeddatamgr.2 Change of int (\*destroyPredicates)(OH_Predicates \*predicates) in OH_Predicates Struct to int (*destroy)(OH_Predicates *predicates)
**Change Impact**
This change is incompatible with earlier versions. The function pointer name is changed from **destroyPredicates** to **destroy**. The input parameters and return values remain unchanged.
**Key API/Component Changes**
Before change:
```ts
int (*destroyPredicates)(OH_Predicates *predicates);
```
After change:
```ts
int (*destroy)(OH_Predicates *predicates);
```
**Adaptation Guide**
Example:
Code before change:
```
predicates->destroyPredicates(predicates);
```
Code after change:
```
predicates->destroy(predicates);
```
## cl.distributeddatamgr.3 Change of int (\*destroyValueObject)(OH_VObject \*valueObject) in OH_VObject Struct to int (\*destroy)(OH_VObject \*valueObject)
**Change Impact**
This change is incompatible with earlier versions. The function pointer name is changed from **destroyValueObject** to **destroy**. The input parameters and return values remain unchanged.
**Key API/Component Changes**
Before change:
```ts
int (*destroyValueObject)(OH_VObject *valueObject);
```
After change:
```ts
int (*destroy)(OH_VObject *valueObject);
```
**Adaptation Guide**
Example:
Code before change:
```
valueObject->destroyValueObject(valueObject);
```
Code after change:
```
valueObject->destroy(valueObject);
```
## cl.distributeddatamgr.4 Change of int (\*destroyValuesBucket)(OH_VBucket \*bucket) in OH_VBucket Struct to int (\*destroy)(OH_VBucket \*bucket)
**Change Impact**
This change is incompatible with earlier versions. The function pointer name is changed from **destroyValuesBucket** to **destroy**. The input parameters and return values remain unchanged.
**Key API/Component Changes**
Before change:
```ts
int (*destroyValuesBucket)(OH_VBucket *bucket);
```
After change:
```ts
int (*destroy)(OH_VBucket *bucket);
```
**Adaptation Guide**
Example:
Code before change:
```
valueBucket->destroyValuesBucket(valueBucket);
```
Code after change:
```
valueBucket->destroy(valueBucket);
```
## cl.distributeddatamgr.5 Change of OH_Rdb_Config Struct Member Variables
**Change Impact**
The changes are incompatible with earlier versions. <br>The type of **securityLevel** is changed from **enum OH_Rdb_SecurityLevel** to **in**.<br>The member variable **path** is deleted.<br>The member variables **selfSize**, **dataBaseDir**, **storeName**, **bundleName**, and **moduleName** are added.
**Key API/Component Changes**
OH_Rdb_Config before change:
```ts
typedef struct {
const char *path;
bool isEncrypt;
enum OH_Rdb_SecurityLevel securityLevel;
} OH_Rdb_Config;
```
OH_Rdb_Config after change:
```ts
typedef struct {
int selfSize;
const char *dataBaseDir;
const char *storeName;
const char *bundleName;
const char *moduleName;
bool isEncrypt;
int securityLevel;
} OH_Rdb_Config;
```
**Adaptation Guide**
When creating an RDB store with **OH_Rdb_Config**, you need to pass in the bundle name and module name.
## cl.distributeddatamgr.6 Change of const char *path in OH_Rdb_DeleteStore() to const OH_Rdb_Config *config
**Change Impact**
This change is incompatible with earlier versions. The input parameter is changed from **const char *path** to **const OH_Rdb_Config *config**.
**Key API/Component Changes**
OH_Rdb_DeleteStore before change:
```ts
int OH_Rdb_DeleteStore(const char *path);
```
OH_Rdb_DeleteStore after change:
```ts
int OH_Rdb_DeleteStore(const OH_Rdb_Config *config);
```
**Adaptation Guide**
Example:
Code before change:
```
OH_Rdb_DeleteStore("")
```
Code after change:
```
OH_Rdb_DeleteStore(config)
```
# File Management Subsystem Changelog
## c1.filemanager.1 Change of the fileAccess Module
The **fileAccess** module will no longer support operations for obtaining thumbnails and media assets.
**Change Impact**
1. Deleted **getThumbnail()**.
2. Deleted the **FILEKEY** of image and audio options.
**Key API/Component Changes**
Deleted APIs:
| Class | API |
| -------------- | ------------------------------------------------------------ |
| fileAccessHelper | getThumbnail(uri: string, size: image.Size): Promise<image.PixelMap>;|
| fileAccessHelper | getThumbnail(uri: string, size: image.Size, callback: AsyncCallback<image.PixelMap>): void;|
Deleted options:
| Enum| Deleted Key Value|
| -------- | ---- |
| FileKey | DURATION = 'duration' |
| FileKey | WIDTH = 'width' |
| FileKey | HEIGHT = 'height' |
# Wi-Fi Subsystem Changelog
# cl.wifi.1 Change of the Name of the API for Obtaining Wi-Fi Scan Result
The name of the API for obtaining Wi-Fi scan result is changed in API version 10 Beta1 and then changed to the names used in API version 9 release.
**Change Impact**
The JS API name needs to be adapted for applications developed based on earlier versions. Otherwise, relevant functions will be affected.
**Key API/Component Changes**
- Involved API:
getScanInfoList(): Array<WifiScanInfo>;
- Before change:
```js
getScanInfoList(): Array<WifiScanInfo>;
```
- After change:
```js
getScanResults(): Array<WifiScanInfo>;
getScanResultsSync(): Array<WifiScanInfo>;
```
**Adaptation Guide**
Example:
- Call **getScanResults**.
```js
function getScanResultsPromise() {
let methodName = `${tag} getScanResultsPromise`
wifiManager.getScanResults((err, data) => {
if (err) {
showToastE(`${methodName} failed ${JSON.stringify(err)}`)
return
}
if (data == null || data.length == 0) {
showToast(`${methodName} end data is null`)
return;
}
})
}
```
- Call **getScanResultsSync**.
```js
function getScanResultsSync(): Array<wifiManager.WifiScanInfo> {
let methodName = `${tag} getScanResultsSync`
try {
return wifiManager.getScanResultsSync();
} catch (error) {
showToastE(`${methodName} failed ${JSON.stringify(error)}`)
}
return Array();
}
```
# cl.wifi.2 Change of Wi-Fi P2P APIs
The names of P2P APIs are changed in API version 10 Beta1 and then changed to the names used in API version 9 release.
**Change Impact**
The JS API name needs to be adapted for applications developed based on earlier versions. Otherwise, relevant functions will be affected.
**Key API/Component Changes**
- Added APIs
| API| Description|
|------|---------|
| **function** updateNetwork(config: WifiDeviceConfig): number; | Updates the added hotspot configuration information. |
| **function** disableNetwork(netId: number): **void**; | Disables the added hotspot configuration. |
| **function** removeAllNetwork(): **void**; | Deletes all hotspot configurations. |
| **function** removeDevice(id: number): **void**; | Deletes configuration of a single hotspot. |
| **function** getStations(): Array<StationInfo>; | Obtains information about devices connected to this hotspot. |
| **function** createGroup(config: WifiP2PConfig): **void**; | Creates a P2P group. |
| **function** removeGroup(): **void**; | Removes a P2P group. |
| **function** startDiscoverDevices(): **void**; | Starts P2P scan. |
| **function** stopDiscoverDevices(): **void**; | Stops P2P scan. |
| **function** deletePersistentGroup(netId: number): **void**; | Deletes the persistent P2P group with a specified network ID. |
| **function** setDeviceName(devName: string): **void**; | Sets the P2P device name. |
- Deprecated APIs
| API |Description |
| ------------- |-------------------------------------------------------- |
| **function** updateDeviceConfig(config: WifiDeviceConfig): number; | Updates the added hotspot configuration information. |
| **function** disableDeviceConfig(networkId: number): **void**; | Disables the added hotspot configuration. |
| **function** removeAllDeviceConfigs(): **void**; | Deletes all hotspot configurations. |
| **function** removeDeviceConfig(networkId: number): **void**; | Deletes configuration of a single hotspot. |
| **function** getHotspotStations(): Array<StationInfo>; | Obtains information about devices connected to this hotspot. |
| **function** createP2pGroup(config: WifiP2PConfig): **void**; | Creates a P2P group. |
| **function** removeP2pGroup(): **void**; | Removes a P2P group. |
| **function** startDiscoverP2pDevices(): **void**; | Starts P2P scan. |
| **function** stopDiscoverP2pDevices(): **void**; | Stops P2P scan. |
| **function** deletePersistentP2pGroup(netId: number): **void**; | Deletes the persistent P2P group with a specified network ID. |
| **function** setP2pDeviceName(devName: string): **void**; | Sets the P2P device name. |
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册